目标:

  • socketio.run(app)启动服务器,并使用while循环将数据无限发送到多个javascript(客户端)。
  • 数据来自另一个while循环,但是一旦脚本运行(与客户端连接无关的),循环就需要启动,以供其他使用。

  • 当前的:
  • 对于第一点,我已经有以下代码:
    def background_thread():
        while True:
            socketio.emit('response',{'data': value},namespace='/test')
    
    @socketio.on('connect', namespace='/test')
    def test_connect():
        global thread
        with thread_lock:
            if thread is None:
                thread = socketio.start_background_task(target=background_thread)
        emit('response', {'data': 'Connected'})
    
    if __name__ == '__main__':
        socketio.run(app, debug=True, host='localhost', port=args.portNum)
    

  • 从上面,我在客户端连接到服务器
    之后仅添加了一个线程。我不知道如何从这一点达到第二点?我正在考虑使用另一个线程,但是在组织代码时遇到问题,以便一旦客户端连接到服务器,socketio.start_background_task可以与默认的python线程无限共享数据

    另一个问题:如何允许多个客户端连接到一台服务器?

    谢谢大家!

    最佳答案

    我不确定我是否理解您的问题,但是如果您要问的是如何独立于客户端连接启动线程,则可以在启动服务器之前立即启动它:

    if __name__ == '__main__':
        socketio.start_background_task(my_other_thread)
        socketio.run(app, debug=True, host='localhost', port=args.portNum)
    

    如果您需要同步这两个线程,例如,当my_other_thread具有要发送的新值时,background_thread立即将其拾取并发送,然后可以使用标准线程同步原语。在这种情况下,可能需要一个Event实例。请参阅标准库中的Python线程文档。

    关于如何允许多个客户端连接,您无需为此做任何事情。您拥有的服务器将允许来自多个客户端的连接。

    09-20 22:38