skynet:queue

在 skynet 中,当服务收到消息后,skynet 会起一个协程来处理消息,当某个协程涉及到异步让出执行时,skynet 会继续执行下一条消息,等到该协程的醒消息到达时便继续执行。

有时候,我们想保持处理客户端发送消息的顺序性,比如客户端依次发送消息 a 和 b ,而由于某种需求,我们又要保证 b 一定要在 a 之后返回,这个时候就需要用到 skynet.queue。

使用方法:

local queue = require "skynet.queue"
local cs = queue()  --获取一个执行队列,返回值为一个 closure
cs(f, ...) --将 函数f 及 参数 丢到队列中

一、测试脚本

修改前一篇文章:skynet:服务重入问题 中的测试脚本:echoluamsg.lua:

skynet = require "skynet"
require "skynet.manager"
local queue = require "skynet.queue"
local cs = queue()


local command = {}

function command.func1()
         skynet.sleep(2000)
         return 1
end

function command.func2()
        return 2
end



skynet.start(function()
        skynet.register("echoluamsg")

        skynet.dispatch("lua", function(session, address, cmd)
                local f = command[cmd]
                 if f then
                        cs(function()
                                print(cmd .. " start")

                                ret = cs(f)
                                skynet.retpack(ret)
                                print(cmd .. " end, ret:" .. ret)
                        end)
                  end
        end)
end)

二、测试结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值