我现在正在编写一个单播聊天服务器模型,流程如下:
我使用python标准库asyncore实现了聊天服务器模型。一旦客户端连接到服务器,我发现CPU上升(1%vs 24%)。我相信性能受到handle_write函数循环的限制。
是否有更好的(例如更有效的)框架来完成我的聊天服务器要求?
提前致谢
答案 0 :(得分:2)
当然我们需要实际的代码来调试问题。但你主要问的是:
是否有更好的(例如更有效的)框架来完成我的聊天实现?
是。人们普遍认为asyncore
很糟糕。它既难以使用又效率低下。它在Windows上尤其糟糕,因为select
在Windows上特别糟糕。
所以,是的,使用不同的框架可能会让事情变得更好。
不幸的是,SO问题不是获取框架建议的好地方,但我可以抛弃常见的嫌疑人列表:twisted,monocle,gevent,{{ 3}},eventlet。
或者,如果您不担心几十个客户端的可扩展性,只需要小规模的性能,每个客户端使用一个线程(甚至两个线程,一个用于读取,一个用于写入)和阻塞I / O非常简单。
最后,如果你要及时了解Python 3.x,那么3.4很可能会有一个新的和改进的异步I / O模块,它比{{1}更高效,更容易使用(几乎肯定会基于asyncore
)。所以...最好的解决方案可能是获得一台时间机器并继续前进几个月。 (或者,如果您是将来寻找此答案的读者,请查看tulip下的标准库,并猜测哪个模块是新的和改进的异步I / O模块。)
答案 1 :(得分:1)
我刚刚从网上阅读,讨论了不同python Web服务器(Link)之间的效率。
我想我会使用gevent,因为它非常有效(似乎)。