我在我的Express / Node.js应用程序中使用Socket.io作为后端websocket服务器。服务器端代码如下所示:
const socketIo = io(server);
socketIo.on('connection', (client) => {
console.log('client connected');
client.emit('test', { test: '123' });
client.on('client-test', (data) => {
console.log('from client: ', data);
});
});
在前端(托管在同一个Node.js服务器上),我使用本机websockets,我有这个:
const socket = new WebSocket('ws://localhost:3001');
socket.onopen = () => {
socket.send('I am a client and I am listening');
socket.onmessage = (event) => {
console.log('Client received message: ', event);
};
socket.onclose = (event) => {
console.log('Client socket has closed: ', event);
}
};
似乎没有建立websocket连接(我没有从服务器记录任何内容)。此外,我不确定如何在客户端接受来自服务器的发出消息(即“测试”消息),也不知道如何从客户端接受服务器上的消息(即服务器期待一些“客户端测试”消息。
我想知道前端的原生websockets是否与后端的Socket.io不兼容。我在前端使用Socket.io时也进行了设置工作,但如果可能的话,我希望在前端使用本机websockets。
答案 0 :(得分:4)
Socket.io不是本机websockets,它有自定义传输层。要与socket.io通信,您需要https://github.com/socketio/engine.io-client。
或者,您可以在后端使用本机websocket库。喜欢:https://github.com/websockets/ws