我已经使用 Node.js 和 Express 构建了一个 socket.io 服务器。在浏览器和普通 socket.io 客户端上一切正常,但是当我尝试在 Flutter 中使用 WebSocket 时出现错误
HttpException: Connection closed before full header was received, uri = http://csw.abbadabba.tech:3001
我只是想让它与这样的基本连接一起工作:
var _url = 'ws://csw.abbadabba.tech:3001';
WebSocket chatsocket = await WebSocket.connect(_url);
chatsocket.add('connect');
寻找已经这样做并且有一些示例可以查看的人,尝试拥有一个我的应用程序始终连接到的聊天服务器,所以如果有更好的服务器架构可以使用,我也愿意.任何帮助都会很棒。
提前致谢。
最佳答案
问题是您正在尝试使用 Flutter 的 WebSocket 实现来连接到 socket.io 服务器。尽管 socket.io 确实使用了 WebSockets,但它不是一个纯 Web 套接字实现,并且默认 WebSocket 客户端不会将其识别为有效。您需要使用特定的 socket.io flutter 包。
来自 socket.io 文档:https://socket.io/docs/#What-Socket-IO-is-not
socket.io 不是什么
Socket.IO 不是 WebSocket 实现。尽管 Socket.IO 确实尽可能使用 WebSocket 作为传输,但它会为每个数据包添加一些元数据:数据包类型、 namespace 和需要消息确认时的 ack id。这就是为什么 WebSocket 客户端将无法成功连接到 Socket.IO 服务器,而 Socket.IO 客户端也将无法连接到 WebSocket 服务器。
关于node.js - Flutter WebSockets 连接到 Socket.io 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023323/