flask-socketio的connect中,如何实时监听全局变量A的值,每当其改变时都向前端发送一次消息
时间: 2023-11-22 19:55:00 浏览: 81
你可以在 `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);
});
```
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)