我是 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 秒(缓慢的移动网络延迟)
最佳答案
Corona contains LuaSockets这将使您进行异步套接字通信,如所见 here .
关于sockets - 如何在 Corona SDK Lua 中运行阻塞操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203163/