问题是我的Lua服务器无法同时接受多个请求。 我试图让每个客户端消息在协程上处理,但这似乎失败了。LuaSocket服务器如何同时处理多个请求?
while true do
local client = server:accept()
coroutine.resume(coroutine.create(function()
GiveMessage(client)
end))
end
此代码似乎并不实际上同时接受多个客户端消息。这种方法有什么问题?感谢您的帮助。
问题是我的Lua服务器无法同时接受多个请求。 我试图让每个客户端消息在协程上处理,但这似乎失败了。LuaSocket服务器如何同时处理多个请求?
while true do
local client = server:accept()
coroutine.resume(coroutine.create(function()
GiveMessage(client)
end))
end
此代码似乎并不实际上同时接受多个客户端消息。这种方法有什么问题?感谢您的帮助。
您将无法只使用协程创建真正的同时处理 - 协程是合作多任务。同时只执行一个协程。
您编写的代码与直接在循环中调用GiveMessage()
没有区别。您需要编写协同调度程序,并找到合理的理由从GiveMessage()
中获得该方法的工作。
有至少三种解决方案,这取决于你的任务的细节:你的服务器的
AFAIK协同程序不能与luaSocket开箱即用。但你可以使用Copas。
Copas本身使用协同程序。 – 2011-02-19 09:42:20