高效的python聊天服务器

时间:2013-03-19 23:06:12

标签: python sockets chat asyncore

我现在正在编写一个单播聊天服务器模型,流程如下:

  • 发件人向聊天服务器发送消息,在消息中服务器还指定消息收件人ID
  • 聊天服务器将根据收件人ID
  • 将邮件路由到正确的客户端

我使用python标准库asyncore实现了聊天服务器模型。一旦客户端连接到服务器,我发现CPU上升(1%vs 24%)。我相信性能受到handle_write函数循环的限制。

是否有更好的(例如更有效的)框架来完成我的聊天服务器要求?

提前致谢

2 个答案:

答案 0 :(得分:2)

当然我们需要实际的代码来调试问题。但你主要问的是:

  

是否有更好的(例如更有效的)框架来完成我的聊天实现?

是。人们普遍认为asyncore很糟糕。它既难以使用又效率低下。它在Windows上尤其糟糕,因为select在Windows上特别糟糕。

所以,是的,使用不同的框架可能会让事情变得更好。

不幸的是,SO问题不是获取框架建议的好地方,但我可以抛弃常见的嫌疑人列表:twistedmonoclegevent,{{ 3}},eventlet

或者,如果您不担心几十个客户端的可扩展性,只需要小规模的性能,每个客户端使用一个线程(甚至两个线程,一个用于读取,一个用于写入)和阻塞I / O非常简单。

最后,如果你要及时了解Python 3.x,那么3.4很可能会有一个新的和改进的异步I / O模块,它比{{1}更高效,更容易使用(几乎肯定会基于asyncore)。所以...最好的解决方案可能是获得一台时间机器并继续前进几个月。 (或者,如果您是将来寻找此答案的读者,请查看tulip下的标准库,并猜测哪个模块是新的和改进的异步I / O模块。)

答案 1 :(得分:1)

我刚刚从网上阅读,讨论了不同python Web服务器(Link)之间的效率。

我想我会使用gevent,因为它非常有效(似乎)。