Python服务器编写的正确方式

3

哪种方式更好?

是创建一个while循环然后使用select模块,还是使用ThreadedTCPServer与自定义类一起使用。

我在使用Threaded TCP Server时遇到了问题,不过这可能只是我的编码问题。


按照什么标准来衡量更好? - Matt Ball
那么,什么是通用方法。 - Anonymous
我曾认为while循环不好,但事实证明它似乎比“Python认可”的方法更有效。 - Anonymous
什么样的服务器?HTTP/web,还是更低级别的TCP?最好不要自己编写,因为你将会调试其他人已经找到解决方案的问题。你在ThreadedTCPServer方面遇到了哪些问题? - Ben Hoyt
非常慢,迟缓,当我执行键盘中断时,它会挂起长达5分钟(显然存在已知问题,我在谷歌上找到了相关信息)。另外忘了提到,这是低级TCP。 - Anonymous
2个回答

5

我的个人建议是使用Twisted。它是一个基于Python的框架,主要用于编写事件驱动的网络软件。文档中有许多关于如何创建各种类型的服务器和客户端的示例。


虽然 Twisted 不一定是万能的解决方案,但在其问题领域(并发、工作分配)中很难找到它无法胜任的事情。 - wberry

1

我相信没有所谓的“正确”方法。

如果您不想、不必或不能使用任何现有的服务器实现,则一般思路如下(伪代码):

ss = serversocket()
ss.bind ()
while (True):
  cs = ss.accept ()
  spawnCommThread (cs)

在每个客户端的CommThread中,您需要负责从accept返回的套接字读取数据,与客户端进行通信,并在客户端关闭连接或满足其他条件时结束线程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接