問題是我的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