nodejs socket.io客户端不交换发出的消息

时间:2018-07-25 09:46:56

标签: node.js socket.io

我对nodejs和socket.io有一个奇怪的行为 在节点服务器上,socket.io运作良好:

...
const nodeServer = app.listen(app.get('port'), () => {
    console.log(
        '%s App is running at http://localhost:%d in %s mode',
        chalk.green('✓'),
        app.get('port'),
        app.get('env')
    );

});
var io = require('socket.io').listen(nodeServer);
io.on('connection', function(socket){
    socket.on('new_message', function(msg){
        console.log('emit message: ' + msg.message);
        socket.emit('new_message', msg);
    });
});

在客户端,我有一个简单的调用来发出和接收数据:

<script src="socket.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
    const chat = io.connect('http://xxx.xxx.xxx.xxx:4000');

  // ..... Send message
  document.getElementById('sendChat').addEventListener('click', function(event){
     chat.emit('new_message', {message: document.getElementById('message').value});
  })

  // ..... Receive message
  chat.on('new_message', (data) => {
     console.log(data.message)
     $('.chatRoom').append('<p class="message">'+data.message+'</p>');
  })
</script>

我现在将打开2个客户:

使用此脚本,我应该在收到带有“ new_message”事件的消息时将控制台打印出来,并将消息追加到div上。 当我从第一个客户端发送消息时,第二个客户端没有收到消息,反之亦然,但是该消息显示在当前客户端的.chatRoom div上,因此我认为服务器已接收并很好地发出了消息

Node js服务器同时输出来自client1和client2的消息

有人对此有解释吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

socket.emit的工作方式,它向发件人(当前客户端)发回一条消息。

要发送给所有客户端,请使用(服务器端):

io.emit('message', "this is a test");

使用您的代码:

var io = require('socket.io').listen(nodeServer);
io.on('connection', function(socket){
    socket.on('new_message', function(msg){
        console.log('emit message: ' + msg.message);
        io.emit('new_message', msg);
    });
});

选中Socket.IO cheatsheetrooms and namespaces的文档也可能会有用。

希望对您有帮助!