skynet:socket 測試

一、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 進程輸出:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章