1

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

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

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

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

提前致谢

4

2 回答 2

2

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

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

是的。人们普遍认为这很asyncore糟糕。它很难使用并且效率低下。在 Windows 上尤其糟糕,因为select在 Windows 上尤其糟糕。

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

不幸的是,一个 SO 问题不是获得框架建议的好地方,但我可以抛出一个常见的嫌疑人列表:twistedmonoclegeventeventlettulip

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

最后,如果你一直在使用 Python 3.x,那么 3.4 很有可能会有一个新的和改进的异步 I/O 模块,它比它更高效、更容易使用asyncore(而且几乎肯定会基于tulip)。所以……最好的解决办法可能是买一台时光机,再往前走几个月。(或者,如果您是将来寻找此答案的读者,请查看IPC下的标准库并猜测哪个模块是新的和改进的异步 I/O 模块。)

于 2013-03-19T23:12:40.470 回答
1

我刚从网上读到,谈论不同 python 网络服务器(链接)之间的效率。

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

于 2013-03-20T02:48:06.837 回答