我是LUA的新手,我正在使用Corona SDK在LUA中编写一个tcp消息库。即使它在协同程序中运行,我仍然遇到一个问题,即套接字读取操作会挂起应用程序UI。如何在Corona SDK Lua中运行阻塞操作?
如何启动协同程序:
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线程)。 有没有可能从套接字读取没有阻止用户界面?例如使用真正的线程或异步方法?谢谢。
P.S.消除BUFSIZ是不是因为我不希望有UI受阻于一切,甚至0.2..0.4秒(慢速移动网络延迟)选项
不幸的是,它执行HTTP请求,但我需要直接使用套接字。 – ZAN
第二个链接呢?我没有彻底地通过它,但它似乎是使用套接字连接.. – SatheeshJM
第二个来源真的包含一个异步解决方法,谢谢。我会尝试使用它来编译更多的东西。 – ZAN