2013-03-19 74 views
0

我现在正在写一个单播聊天服务器模型,流程将如下:高效蟒蛇聊天服务器

  • 发送者发出消息,到聊天服务器,邮件服务器还可以指定邮件收件人ID
  • 聊天服务器将消息路由到正确的客户,根据收件人ID

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

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

在此先感谢

+0

不是一个真正的问题,但看看[eventlet](http://eventlet.net/) – sean 2013-03-19 23:07:58

回答

2

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

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

是的。人们普遍认为asyncore很糟糕。这很难使用,也不够低效。这在Windows上尤其糟糕,因为select特别吸引Windows。

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

不幸的是,一个SO问题是不是一个好地方得到了框架建议,但我可以抛出通常的嫌疑人名单:twistedmonoclegeventeventlet,​​。另外,如果您不担心可扩展到超过几十个客户端,那么只需小规模的性能,每个客户端使用一个线程(甚至两个线程,一个用于读取,另一个用于写入),以及阻塞I/O非常简单。最后,如果您要与Python 3.x保持同步,3.4很有可能会有一个新的和改进的异步I/O模块,它比asyncore(和它几乎肯定会基于tulip)。所以......最好的解决方案可能是获得一台时间机器并继续前进几个月。 (或者,如果您是将来寻找此答案的读者,请查看IPC下的标准库,并猜测哪个模块是新改进的异步I/O模块。)

1

我刚刚阅读一个网络,谈论不同python web服务器之间的效率(Link)。

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