我对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的消息
有人对此有解释吗?
谢谢。
答案 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 cheatsheet,rooms and namespaces的文档也可能会有用。
希望对您有帮助!