sockets - 如何在 Corona SDK Lua 中运行阻塞操作?

标签 sockets asynchronous tcp lua coroutine

我是 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/

相关文章:

找不到C文件

c++ - Qt:服务器从套接字接收数据

c# - 同时多线程和异步

java - Android 套接字输入流读取(后跟 EPIPE)

python - Python (Django) 应用程序中的线程化 SOAP 请求?

swift - RealityKit - 异步模型加载不起作用

http - 使用golang终止来自IP层的http请求

c++ - 从套接字返回的文件描述符大于 FD_SETSIZE

ios - 在 Swift 中通过 TCP 发送消息(NULL 终止)

c# - C#中读取套接字时算术运算溢出