node.js - Flutter WebSockets 连接到 Socket.io 服务器

标签 node.js socket.io flutter

我已经使用 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/

相关文章:

webview - 如何在 Flutter 中使用 WebViewController 插件显示网页的一部分?

node.js - 对访问 mongodb 的 Node.js 模型代码进行单元测试,而不实际访问数据库

javascript - Firebase:snapshot.val不是函数或其返回值不可迭代

javascript - 如何将递增的 for 循环变量传递给 Node.js 中的函数?

javascript - Nodejs 在发布/订阅中从客户端发布

firebase - Flutter Firebase 身份验证

firebase - 有什么方法可以根据当前用户的UID将图像从Firebase加载到Flutter项目中

javascript - 我无法停止异步

node.js - Node 包管理器在 heroku 部署上失败

javascript - node.js/socket.io : Refresh table on reconnect?