flask-socketio的connect中,如何实时监听全局变量A的值,每当其改变时都向前端发送一次消息
时间: 2023-11-22 18:55:00 浏览: 74
你可以在 `connect` 事件中启动一个新线程(Thread),并在这个线程中监听全局变量 A 的值,每当其发生变化时,使用 SocketIO 的 `emit` 方法向前端发送消息。
下面是一个示例代码:
```python
from threading import Thread
from flask_socketio import emit, join_room, leave_room
from app import socketio
A = 0 # 全局变量 A
def listen_A():
"""监听全局变量 A 的值,每当其发生变化时向前端发送消息"""
global A
while True:
if A != 0:
socketio.emit('A_changed', {'value': A})
A = 0
@socketio.on('connect')
def on_connect():
"""连接到 SocketIO 服务器时启动监听线程"""
join_room(request.sid)
Thread(target=listen_A).start()
```
上面代码中,我们启动了一个新线程 `listen_A` 来监听全局变量 A 的值。在 `listen_A` 中使用了一个死循环来不断检查 A 的值是否发生变化,如果发生变化就使用 `emit` 方法向前端发送消息。在 `connect` 事件中,我们将新线程启动,并加入到当前连接的 `room` 中,这样就可以向该连接发送消息了。
在前端页面中,你可以监听 `A_changed` 事件,并在收到该事件时更新页面显示的 A 的值。例如:
```javascript
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('A_changed', function (data) {
$('#A').text(data.value);
});
```
阅读全文