【问题标题】:How to send a message with WebSocket to a Socket.io server如何使用 WebSocket 向 Socket.io 服务器发送消息
【发布时间】:2016-09-04 11:16:34
【问题描述】:

我正在开发一个 React Native 应用程序,我想使用 WebSocket 类与我的 Socket.io 服务器进行通信。

我可以很好地连接到服务器,但是使用 .send() 方法向它发送消息时遇到问题。

我在 React Native 上试过这个:

var socket = new WebSocket("ws://host:port/socket.io/?transport=websocket");
socket.onopen = () => {
    console.log("connected");
    socket.send('data');
 };

在我的 Socket.io 服务器上,我有一个仅为测试而创建的监听器:

socket.on('data', function(data) {
  console.log("data");
})

连接确实有效,我也可以在服务器上看到它。但是当我做socket.send('data') 时,disconnect 事件在服务器上被调用,而不是我上面写的data 事件。 (我通过使用函数调用.send() 方法对此进行了测试,所以这确实会导致服务器断开连接)

任何人都可以对此有所了解吗?

【问题讨论】:

标签: javascript websocket socket.io react-native


【解决方案1】:

这是因为 Socket.io 与 WebSocket 不完全兼容 - 存在初始握手、连接回退(例如,当没有 WS 可用时,使用 AJAX 长池或其他技术)以及 Socket.io 对您隐藏的其他事情让您的生活更轻松。从本质上讲,Socket.io 应该被视为一个单独的协议。

要连接到 Socket.io 服务器,您必须使用 Socket.io 客户端库。

【讨论】:

  • 好吧,我想可能是这样。然后我会尝试更多让 Socket.io 与 React Native 一起工作
【解决方案2】:
ws.send(`42${ JSON.stringify(["message", { command: "register" }] }`), err => {
   if (err) console.log("err", err);
});

此代码以ws pacakge 为例。

你需要添加 42 告诉 socoket.io 服务器你正在发送消息,{command: "register"} 是你发送的数据,"message" 是 socket.io 正在监听的频道。

io.on("message", (data) => {
  console.log(data); // => {command: "register"}
});

说明:这是 socket.io 正在使用的engine.io-protocol。检查它的规格。

最好的解决方案是两边都使用socket.io,或者根本不使用socket.io。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2022-09-28
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多