首页 > 解决方案 > 如何同时运行多个 eventlet 服务器?

问题描述

我正在尝试设置两个在不同端口上同时侦听的 eventlet 服务器。

下面代码中的第一个服务器用于 SocketIO 实现,第二个用于外部连接。两者分别发挥作用,但不能同时发挥作用。

if __name__ == '__main__':
    eventlet.wsgi.server(eventlet.listen(('0.0.0.0', 4000)), app)
    s = eventlet.listen(('0.0.0.0', 6000))
    pool = eventlet.GreenPool(5)
    while True:
        c, address = s.accept()
        pool.spawn_n(function, c)

标签: pythoneventletpython-socketio

解决方案


问题是该eventlet.wsgi.server()函数没有返回,它运行循环来侦听和处理 Flask-SocketIO 服务器的 HTTP 请求。

您需要做的是将两台服务器之一移动到后台线程。例如,您可以将 Flask-SocketIO 服务器移动到后台线程,如下所示:

if __name__ == '__main__':
    eventlet.spawn(eventlet.wsgi.server, eventlet.listen(('0.0.0.0', 4000)), app)
    s = eventlet.listen(('0.0.0.0', 6000))
    pool = eventlet.GreenPool(5)
    while True:
        c, address = s.accept()
        pool.spawn_n(function, c)

如果您更喜欢移动其他服务器,可以执行以下操作:

def other_server():
    s = eventlet.listen(('0.0.0.0', 6000))
    pool = eventlet.GreenPool(5)
    while True:
        c, address = s.accept()
        pool.spawn_n(function, c)

if __name__ == '__main__':
    eventlet.spawn(other_server)
    eventlet.wsgi.server(eventlet.listen(('0.0.0.0', 4000)), app)

推荐阅读