0

我正在尝试使用 luasocket 连接到 Irc 频道并在我的游戏中发送和接收消息(Wolfenstein Enemy Territory,如果有帮助的话)。

现在我能够做到这一切,但有一个问题。一旦我将其设置为收听消息,它基本上就会锁定。如果我在 Irc 中键入 stoplisten,我有一个备用命令,它只会停止脚本,我可以看到它收到了所有消息,但游戏本身在等待消息时被锁定。

关于如何在不冻结游戏的情况下做到这一点的任何想法?我最近刚学了一点协程所以我不知道我是否正确使用它们。我还应该注意,如果有帮助,我可以访问每毫秒运行一次的运行帧函数(虽然通常它是这样完成的:if math.mod(currentTime, 50) ~= 0 then return end)

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

4

1 回答 1

0

您的问题是所有套接字默认情况下都是阻塞的,这意味着它们将暂停(“阻塞”)当前执行线程(在本例中为您的游戏),直到它们获得所需的结果或“超时”。

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

LuaSocket参考包含完整的详细信息,但您必须修改代码以处理“超时”故障状态,或添加对 socket.select() 的调用以确保仅使用“准备好”的套接字用过的。

于 2013-08-28T04:06:53.903 回答