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

时间:2017-10-30 15:40:26

标签: node.js express websocket 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);
    });
});

在前端(托管在同一个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。

1 个答案:

答案 0 :(得分:4)

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

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