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