xd96dx Docs
  • c/c++
    • 网络编程
      • linux 网络
        • linux 网络io模型
        • Signal-Driven I/O Model(信号驱动)
        • Asynchronous I/O Model(异步IO)
      • IO多路复用
        • select 示例
        • poll 示例
        • epoll 示例
      • Reactor实例之 muduo 源码分析
    • stl实现
      • 容器(Containers)
        • Vector(动态数组)
        • List(双向链表)
        • Deque(二级动态数组)
  • 游戏开发
    • skynet 从demo到源码
      • server-client demo
      • skynet 源码分析-启动流程之初始化
      • skynet 源码分析-启动流程之创建service
      • skynet 源码分析-启动流程之线程池启动
Powered by GitBook
On this page
  1. 游戏开发
  2. skynet 从demo到源码

server-client demo

server.lua

local skynet = require "skynet"

local function handle_message(message)
    -- 处理消息,可以在这里做一些业务处理
    skynet.error("Received message: " .. message.name, message.age)
    return "this is : " .. "11111111"
end

local function server()
    skynet.dispatch("lua", function(session, source, message)
        skynet.error("session: ", session, source)
        local response = handle_message(message)
        skynet.error(response)
        skynet.retpack(response)
    end)
end

skynet.start(function()
    skynet.error("Server is startup")
    server()
end)

client.lua

local skynet = require "skynet"

local function client()
    local server_address = skynet.queryservice("server")  -- 获取服务端地址

    if server_address then
        local message = {name = "hello", age = 10}
        -- local message = "send msg"

        -- 发送消息给服务端
        local response = skynet.call(server_address, "lua", message)

        -- 使用 skynet.unpack 进行解包
        local unpacked_response = skynet.unpack(response)

        -- 输出服务端的响应
        skynet.error("client get Response: " .. response)
    else
        skynet.error("!!! server address is nil !!!")
    end

    skynet.exit()
end

skynet.start(function()
    client()
end)

main.lua

local skynet = require "skynet"

skynet.start(function()
    skynet.error("Server is starting...")
    skynet.uniqueservice("server")  -- 启动 sender,它会启动 receiver

    skynet.error("client is starting...")
    skynet.newservice("client")
end)

config

harbor = 0
thread = 12
logger = nil
logpath = "."

bootstrap = "snlua bootstrap"
start = "main"

luaservice = "./service/?.lua;./demo3/?.lua;./lualib/?.lua"
lua_path = "./service/?.lua;./demo3/?.lua;./lualib/?.lua"
lua_cpath = "./luaclib/?.so"
cpath = "./cservice/?.so"

执行代码及输出:

Previousskynet 从demo到源码Nextskynet 源码分析-启动流程之初始化

Last updated 3 months ago