检查Luasocket irc以接收消息。

我正在尝试使用luasocket连接到Irc频道并在我的游戏(Wolfenstein Enemy Territory)内发送和接收消息。

现在,我能够完成所有操作,只有一个问题。一旦我设置它来监听消息,它就会基本上锁定。如果我在Irc中输入stoplisten,它会停止脚本,我可以看到它已经获取了所有消息,但是游戏本身在等待消息时被锁定。

有什么想法可以做到这一点而不冻结游戏吗?我最近才学习了一些协程,所以我不知道我是否使用它们正确。

我还应该注意到,如果有帮助,我可以访问每毫秒运行一次的运行帧函数(尽管通常是这样做:如果math.mod(currentTime,50)~=0则返回end)。

这是我的代码部分:[http://pastebin.com/j1gCqm4R](http:/ / pastebin.com/j1gCqm4R) (我不会编辑我的所有代码并缩进只是为了在这里发布它,所以我把它放在pastebin上)

点赞
用户2712809
用户2712809

你的问题在于默认情况下所有套接字都是_阻塞_的,这意味着它们会停止(_阻塞_)当前的执行线程(在这种情况下,你的游戏),直到它们获得所需的结果或“超时”。

解决方案是使用_非阻塞_套接字。在客户端套接字对象上调用:settimeout(0),所有未来的:send(...):receive(...)将立即返回,无论是成功还是超时。

LuaSocket参考文档包含了完整的细节,但你需要修改你的代码来处理“超时”失败状态,或者添加调用socket.select()来确保你只使用“准备好”的套接字。

2013-08-28 04:06:53