itskingname
V2EX  ›  问与答

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

  •  
  •   itskingname · Aug 14, 2019 · 1766 views
    This topic created in 2553 days ago, the information mentioned may be changed or developed.

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

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

    有以下几个方案:

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

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

    8 replies    2019-08-14 12:54:53 +08:00
    lishunan246
        1
    lishunan246  
       Aug 14, 2019 via Android
    萌新想问下 Python 进程可以做到只占用 15m 内存吗?
    itskingname
        2
    itskingname  
    OP
       Aug 14, 2019
    @lishunan246 可以。
    so1n
        3
    so1n  
       Aug 14, 2019
    没弄过这些,不过协程比较好把
    40huo
        4
    40huo  
       Aug 14, 2019 via Android
    每个线程里都可以起协程,内存更少
    locoz
        5
    locoz  
       Aug 14, 2019
    是 asyncio 不够骚了吗...聊天服务器+2000 个连接,用协程没啥压力啊。
    itskingname
        6
    itskingname  
    OP
       Aug 14, 2019
    @locoz 感谢感谢
    misaka19000
        7
    misaka19000  
       Aug 14, 2019
    肯定用协程啊
    itskingname
        8
    itskingname  
    OP
       Aug 14, 2019
    @misaka19000 我准备用 asyncio 的 Stream
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2471 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 16:03 · PVG 00:03 · LAX 09:03 · JFK 12:03
    ♥ Do have faith in what you're doing.