【发布时间】:2013-01-07 20:02:24
【问题描述】:
我是 LUA 新手,我正在使用 Corona SDK 在 LUA 中编写一个 tcp 消息传递库。我遇到了一个问题,即套接字读取操作即使在协程中运行也会挂起应用程序 UI。
我如何启动协程:
function Messaging:readLoop()
self.readCoroutine = coroutine.create(function() self:blockingLoop() end)
coroutine.resume(self.readCoroutine)
end
阻塞循环:
function Messaging:blockingLoop()
line,err,rest = self.sock:receive(BUFSIZE) -- <= Hangs UI if there is no incoming data
end
当然我知道协程不等于线程,但我希望 LUA 解释器在阻塞操作时切换到另一个协程(例如带有 GIL 的 Python 线程)。 是否有可能在不阻塞 UI 的情况下从套接字读取?例如使用真正的线程或异步方法?谢谢。
附:消除 BUFSIZ 不是选项,因为我根本不想阻止 UI,即使是 0.2..0.4 秒(移动网络延迟慢)
【问题讨论】:
标签: sockets asynchronous tcp lua coroutine