一、demo
1、目录准备
- 新建 server 目录,将 skynet 目录拷贝到 server 目录下;
- 在 skynet 目录同级新建 game 目录;
- 在 game 目录中新建3个文件,config、main.lua 和 service_gate.lua,其中 log 目录是存放日志文件,最终目录结构如下:
2、文件 service_gate.lua 内容
/* 引入框架 */
local skynet = require "skynet"
local socket = require "skynet.socket"
function accept(id, addr)
print("accept connect from addr: " .. addr .. " id: " .. id)
socket.start(id)
while true do
local msg = socket.read(id)
if msg then
print(msg)
socket.write(id, "msg from server")
else
socket.close(id)
return
end
end
end
skynet.start(function()
local listen_id = socket.listen("0.0.0.0", 8888)
socket.start(listen_id , accept)
end)
3、文件 main 内容
local skynet = require "skynet"
skynet.start(function()
skynet.newservice("service_gate") /* 启动服务:service_gate */
skynet.exit()
end)
4、文件 config 内容
-- 非配置项,单纯的定义一个了根目录变量,方便后面目录的配置和修改
root="./"
-- 必须配置,skynet 启动的第一个服务以及其启动参数
bootstrap = "snlua bootstrap"
-- 必须配置,工作线程数,不要多余 cpu 核数
thread = 1
-- 必须配置,用 C 编写的服务模块的位置
cpath = root.."cservice/?.so"
-- skynet_error的输出文件,默认为nil表示标准输出
logger = "../game/log/game.log"
-- 当你运行时为一个服务打开 log 时,这个服务所有的输入消息都会被记录在这个目录下,文件名为服务地址
logpath = "../game/log"
-- 0表示单节点模式,1-255 间的任意整数表示多节点模式
harbor = 0
-- lua 脚本所在的位置
luaservice = root.."service/?.lua;"..root.."../game/?.lua"
-- 启动脚本,必须在luaservice指定的路径中,默认为 main.lua
start = "main"
二、启动 skynet
在 server/skynet 目录下执行命令:./skynet …/game/config
检查日志文件:server/game/log/game.log,skynet 启动是否出错。
- 问题一:skynet Can’t launch logger service
原因:在skynet根目录以外的地方执行 skynet,从而导致相关模块找不到。
三、测试
socket 测试工具采用:sokit。
tcp 连接 skynet 后,一次发送四个数据包。检查 skynet 进程输出: