Flutter使用socket_io_client连接SocketIO无响应该如何解决?
问题排查及解决方案
- 事件名称使用错误
Socket.IO 客户端监听连接成功的事件为connect,你代码中使用的connection是服务端侧的连接事件,客户端不会触发该事件,自然不会打印对应日志。 - 事件监听顺序错误
你在调用connect()方法后才绑定事件监听,若连接建立速度快于事件绑定速度,回调会被遗漏,需要将所有事件监听逻辑放在connect()调用之前。 - 缺少异常、断开相关事件监听
当前仅监听了错误的连接事件,无法捕获连接失败、断开等异常情况,需要补充相关事件监听排查问题。 - 版本不匹配
socket_io_client版本需要与服务端部署的 Socket.IO 版本严格对应:- socket_io_client v1.x 对应服务端 Socket.IO v2.x
- socket_io_client v2.x 对应服务端 Socket.IO v3/v4.x
版本不匹配会出现无报错无法连接的情况。
- 安卓端明文 HTTP 权限限制
如果应用运行在安卓9及以上系统,使用 HTTP 协议的服务端地址需要在android/app/src/main/AndroidManifest.xml的application标签中添加android:usesCleartextTraffic="true"配置,否则明文请求会被系统拦截。 - Web端跨域限制
如果是Web端运行,需要确认服务端配置了正确的CORS规则,否则跨域请求会被浏览器拦截,也会出现无报错无法连接的情况。
修正后的参考代码
import 'package:socket_io_client/socket_io_client.dart' as IO; @override void initState() { super.initState(); _messageController = TextEditingController(); _controller = ScrollController(); connectSocket(); } connectSocket() async { print('Connecting to chat service'); socket = IO.io('http://替换为你的服务端实际地址', <String, dynamic>{ 'transports': ['websocket'], 'autoConnect': false, }); // 所有事件监听放在connect调用之前 socket.on('connect', (_) { print('连接成功'); }); socket.on('connect_error', (err) { print('连接出错: $err'); }); socket.on('connect_timeout', (data) { print('连接超时: $data'); }); socket.on('disconnect', (data) { print('连接断开: $data'); }); socket.connect(); }
内容的提问来源于stack exchange,提问作者Shruti Ramnandan Sharma
相关产品推荐
相关产品推荐

