如何通过 python socket.io 无限循环地从服务器向客户端发送数据?

How to send data in infinite loop from server to client throught python socket.io?

我想从一台 vds 机器向另一台机器发送数据(如无限流)。我读过可以使用 python-socket.io。首先,我尝试在我的笔记本电脑上执行此操作(一个终端中的服务器脚本 运行s,另一个终端中的客户端)。并在无限循环中将数字从“服务器”发送到“客户端”。我想实时获取客户端的数据。 (服务器发送“1”,客户端收到“1”等)但是,当我 运行 两个脚本时,我看到服务器正在发送数据而客户端什么也得不到。只有当我停止(ctrl+c)服务器时,所有发送的数据才会打印在客户端的终端上。 如何修复代码以获得实时连接?

server.py

import eventlet
import socketio
import time


sio = socketio.Server()
app = socketio.WSGIApp(sio)

@sio.event
def connect(sid, environ):
    print('connect ', sid)
    my_message(sid, "Client connected")
    # f(sid)


@sio.event
def my_message(sid, data):
    sio.send(data)
    print('Send message ', data)


@sio.event
def disconnect(sid):
    print('disconnect ', sid)


@sio.on('subscribe_to_data')
def subscribe(sid, data):
    counter = 0
    while True:
        sio.send(counter)
        print('Send message from server ', counter)
        counter += 1
        # my_message(sid, i)
        time.sleep(1)

eventlet.wsgi.server(eventlet.listen(('', 5000)), app)

client.py

import socketio

sio = socketio.Client()


@sio.event
def connect():
    print('connection established')
    sio.emit('subscribe_to_data', "I want to subscribe")


@sio.event
def message(data):
    print('message received with ', data)
    

@sio.event
def disconnect():
    print('disconnected from server')


sio.connect('http://localhost:5000')
sio.wait()

更好的实现方式是维护一个连接的客户端列表并执行类似

的操作
while sid in CONNECTED_CLIENTS:
    pass

也可以使用 sio.sleep()

而不是 time.sleep()