如何用WebSocket发送消息到Socket.io服务器



我正在开发一个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');
 };

On my Socket。我在io服务器上创建了这个监听器,用于测试:

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

连接确实工作,并且我也能够在服务器上看到。但是当我执行socket.send('data')时,服务器上调用的是disconnect事件,而不是上面写的data事件。(我通过使用一个函数来调用.send()方法来测试这一点,所以这确实会导致服务器上的断开连接)

有谁能解释一下吗?

这是因为Socket。io与WebSocket并不完全兼容——有初始握手,连接回退(例如。当没有可用的WS时,使用AJAX(长池或其他技术)和Socket的其他东西。我躲着你是为了让你的生活更轻松。从本质上讲,插座。IO应该被看作是一个独立的协议。

连接到套接字。io服务器,你必须使用Socket。IO客户端库

ws.send(`42${ JSON.stringify(["message", { command: "register" }] }`), err => {
   if (err) console.log("err", err);
});

此代码以ws包为例。

您需要添加42来告诉套接字。你正在发送消息的io服务器,{command: "register"}是你发送的数据,"message"是socket的通道。IO正在监听。

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

解释:这是引擎。io协议套接字。IO正在使用。检查它的规格

最好的解决方案是使用socket。IO的两侧或不使用套接字。

相关内容

  • 没有找到相关文章

最新更新