首页 > 解决方案 > nodejs 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 上,所以我认为服务器已收到并很好地发出消息。

节点 js 服务器输出来自 client1 和 client2 的消息

有人对此有解释吗?

谢谢你。

标签: node.jssocket.io

解决方案


它是这样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 备忘单房间和命名空间的文档也很有用。

我希望它有帮助!


推荐阅读