我正在开发一个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的两侧或不使用套接字。