node.js - 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 的消息
有人对此有解释吗?
谢谢你。
解决方案
它是这样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 备忘单,房间和命名空间的文档也很有用。
我希望它有帮助!
推荐阅读
- ssl - TIBCO SMTP 已发送邮件配置-证书问题
- javascript - 是否可以将函数传递给 Puppeteer 的 page.evaluate()
- django - /servicesurvey/8:pk 处的 Django TypeError
- java - 嗨,我试图在我的程序输入中只接受数字,但我收到了错误消息
- flutter - Flutter:使文本以不同的大小响应
- django - Django模型字段默认值与PK相同
- delphi - Delphi:32 位与 64 位中的字符串 [255]
- swift - 线程 1:使用 let realm = try! 发出信号 SIGABRT Xcode 11 升级后的 Realm()
- laravel - 图片未上传到 laravel voyager 指定的目录
- javascript - 当我尝试编译时,我的 JavaScript 代码出错