前面几个项目也一直在用lua,不过coroutine很少使用到,这个项目服务器换了skynet,在逻辑里面也使用协程了。比如网络消息包,不用直接push给客户端,而是使用long pulling 模式,客户端主动查询的模式,服务器没变化先挂起,然后等有修改在返回给客户端。避免了无脑式的推送给客户端,减少网络压力。 coroutine有点难理解的是coroutine.yield的返回值,这里写了个测试例子。
local fun = function (arg)
local a = arg
print("a=",a)
local b = coroutine.yield()
print("b=",b)
end
local co = coroutine.create(fun)
coroutine.resume(co,1)
coroutine.resume(co,2)
结果:
关键的是 第二次 coroutine.resume(co,2) 这个其实是把参数给coroutine.yield的返回值,就是b。