请教大家,在 Python 中,多个 socket 应该如何管理。

2019-08-14 09:52:20 +08:00
 itskingname

我现在有一个聊天服务器 A + 40 个小服务器 S1, S2, ..., S40

小服务器需要和聊天服务器创建 2000 个 Socket 连接。每个 Socket 里面的消息传递时间不同,有一些 Socket 里面持续不停有消息流动,有一些 Socket 里面几十分钟发一条消息。但事先不知道哪个 Socket 的消息多。

有以下几个方案:

  1. 每个服务器启动 50 个进程。每个进程一个 Socket 长连接。每个进程大概占用 15MB 内存。
  2. 每个服务器启动一个进程,每个进程里面启动 50 个线程,每个线程对应一个 Socket 长连接。
  3. 每个服务器启动一个进程,进程中创建 50 个协程,每个携程绑定一个 Socket,哪一个携程来了消息就处理哪一个,其他的挂起。

现在我使用的是第一个方案,效率低下。想使用第三个方案。大家有什么忠告提给我吗?

1301 次点击
所在节点    问与答
8 条回复
lishunan246
2019-08-14 10:15:32 +08:00
萌新想问下 Python 进程可以做到只占用 15m 内存吗?
itskingname
2019-08-14 10:24:27 +08:00
@lishunan246 可以。
so1n
2019-08-14 10:34:38 +08:00
没弄过这些,不过协程比较好把
40huo
2019-08-14 10:47:01 +08:00
每个线程里都可以起协程,内存更少
locoz
2019-08-14 10:52:06 +08:00
是 asyncio 不够骚了吗...聊天服务器+2000 个连接,用协程没啥压力啊。
itskingname
2019-08-14 11:24:46 +08:00
@locoz 感谢感谢
misaka19000
2019-08-14 11:27:40 +08:00
肯定用协程啊
itskingname
2019-08-14 12:54:53 +08:00
@misaka19000 我准备用 asyncio 的 Stream

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/591716

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX