Socket.emit正常但socket.on无响应问题求助(附完整代码)
Socket.IO 'new_image_content' 事件监听不触发问题排查
核心问题分析
你的代码存在两个关键问题导致前端的socket.on('new_image_content')无法触发:
1. 事件流向未闭环
folder_watcher.py作为Socket.IO客户端,向服务器发送new_image_content事件后,服务器仅在on_new_image_content函数中打印日志,没有将事件转发给网页客户端。前端监听的是服务器推送的事件,而非folder_watcher直接发送的事件,因此无法接收到消息。
2. 版本兼容性隐患
前端使用的是Socket.IO 4.1.3,若服务器端flask-socketio版本与客户端不匹配(比如服务器用的是旧版),会导致协议不兼容,事件无法正常传递。Socket.IO v4对应的flask-socketio版本应为v5.x。
修复方案
步骤1:修改服务器转发逻辑
更新Server.py中的on_new_image_content函数,将接收到的事件广播给所有连接的网页客户端:
@socketio.on("new_image_content") def on_new_image_content(data): print("Got new image content from folder watcher: " + str(data)) # 广播事件给所有在线客户端 socketio.emit('new_image_content', data)
步骤2:确保版本匹配
安装与前端兼容的flask-socketio版本:
pip install flask-socketio==5.3.6
步骤3:调整启动顺序
按以下顺序启动服务:
- 启动
Server.py - 启动
folder_watcher.py - 打开
client.html
验证方法
- 在
images文件夹中添加一张图片,查看服务器控制台是否打印Got new image content from folder watcher:日志 - 查看前端浏览器控制台是否输出图片的base64编码,同时
imageContainer中是否加载出图片
内容的提问来源于stack exchange,提问作者Dev Sapariya
相关产品推荐
相关产品推荐

