如何通过 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()
我想从一台 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()