首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

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

  •  
  •   itskingname · 65 天前 · 621 次点击
    这是一个创建于 65 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    有以下几个方案:

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

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

    8 回复  |  直到 2019-08-14 12:54:53 +08:00
        1
    lishunan246   65 天前 via Android
    萌新想问下 Python 进程可以做到只占用 15m 内存吗?
        2
    itskingname   65 天前
    @lishunan246 可以。
        3
    so1n   65 天前
    没弄过这些,不过协程比较好把
        4
    40huo   65 天前 via Android
    每个线程里都可以起协程,内存更少
        5
    locoz   65 天前
    是 asyncio 不够骚了吗...聊天服务器+2000 个连接,用协程没啥压力啊。
        6
    itskingname   65 天前
    @locoz 感谢感谢
        7
    misaka19000   65 天前
    肯定用协程啊
        8
    itskingname   65 天前
    @misaka19000 我准备用 asyncio 的 Stream
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2298 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 14:28 · PVG 22:28 · LAX 07:28 · JFK 10:28
    ♥ Do have faith in what you're doing.