将前端原生 websocket 客户端连接到 Node.js Socket.io 服务器

Att*_*ila 4 websocket node.js express socket.io

我在 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);
    });
});
Run Code Online (Sandbox Code Playgroud)

在前端(托管在同一个 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);
    }
};
Run Code Online (Sandbox Code Playgroud)

websocket 连接似乎从未建立(我没有从服务器记录任何内容)。此外,我不确定如何在客户端接受服务器发出的消息(即“测试”消息),也不知道如何从客户端接受服务器上的消息(即服务器期待一些“客户端”) -测试'消息)。

我想知道前端的本机 websockets 是否与后端的 Socket.io 不兼容。在前端使用 Socket.io 时,我的设置也能正常工作,但如果可能的话,我希望它能与前端的本机 websocket 一起工作。

Bra*_*Dev 5

Socket.io 不是原生的 websockets,它有一个自定义的传输层。要与 socket.io 通信,您需要https://github.com/socketio/engine.io-client

或者,您可以在后端使用本机 websocket 库。喜欢: https: //github.com/websockets/ws