You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Laravel Socket.io接口报错,求解决方案

解决Flutter对接Laravel Socket.io时的WebSocket升级异常

报错信息翻译

Socket错误:WebSocketException: 连接到'http://192.168.42.48:8000/api/users/?EIO=4&transport=websocket#'未被升级为WebSocket

问题根源

你的代码错误地将Socket连接路径设置为API接口路径/api/users,但Laravel Echo + Socket.io的默认Socket服务路径是/socket.io,导致请求无法被后端Socket服务处理,进而无法完成WebSocket协议升级。

解决方案

1. 修正Flutter端Socket配置

移除错误的API路径计算,直接使用Laravel Echo默认的Socket路径,同时去掉不必要的手动请求头(Socket.io客户端会自动处理这些协议头):

void connectToSocket() {
    try {
      String localhostIp = '192.168.42.48';
      String socketUrl = 'http://$localhostIp:8000';

      socket = IO.io(
        socketUrl,
        <String, dynamic>{
          'transports': ['websocket'],
          'autoConnect': false,
          'path': '/socket.io', // 正确的Laravel Echo Socket路径
        },
      );

      socket!.onConnect((_) {
        log('Connected to socket!');
      });

      socket!.onError((error) {
        log('Socket error: $error');
      });

      socket!.on('newMessage', (data) {
        log('New message: $data');
      });

      socket!.connect();
    } catch (e) {
      log('Error connecting to socket: $e');
    }
  }

2. 检查后端Laravel配置

  • 确认Laravel Echo Server配置文件中path字段为/socket.io(默认配置即为该值),自定义修改后需与客户端保持一致。
  • 确保后端配置正确的跨域规则,允许Flutter客户端IP/域名发起WebSocket请求:在Laravel的config/cors.php中,将客户端地址加入allowed_origins,并设置supports_credentials为true。
  • 验证Laravel广播配置(config/broadcasting.php)中,pusher驱动的options参数里,host和port正确指向Laravel Echo Server的运行地址与端口。

内容的提问来源于stack exchange,提问作者Muhammad Usman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:52:30