一、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 進程輸出: