我正在使用miniboa 库进行非阻塞 telnet 式套接字编程。
该库包含一个简单聊天服务器的演示。
在809行,在poll()
函数中,系统使用select.select()
函数。在 miniboa.py 文件中运行演示服务器时,服务器不会阻塞此功能;它执行并继续而不会跳过一个节拍。
我正在编写一个基于该代码的带有网络代码的 MUD,但是在我的 MUD 服务器中(请参阅下面的链接),服务器每次都会阻塞同一个调用。
在我的 MUD 的network.py库中,在第 68 行,服务器执行该poll()
函数。这与在简单聊天服务器中执行的功能相同,但当它在我的 MUD 服务器中执行时,它会阻塞select.select()
调用。
我不知道它为什么会阻塞,但它会阻塞,并且在用户发送数据之前循环不会重复。如果没有人发送任何东西,服务器就会等待。
有谁知道为什么会这样?我很乐意回答有关代码的任何问题,它是开源的,因此您可以查看所有代码并根据需要使用它。
我很感激你们能提供的任何帮助。自从我多年前第一次玩 MUD 以来,我就一直梦想着制作一个 MUD,我害怕继续研究它,直到我解决了这个错误。在我修复此错误之前,服务器将无法按应有的方式工作。
TL;DR:我的服务器在等待客户端输入时卡在了
select.select()
函数中,尽管它不应该在那里暂停。我无法弄清楚它为什么会阻塞。