【发布时间】:2015-03-10 16:07:23
【问题描述】:
我正在开发一个 angular/node 应用程序,人们可以使用 socket.io 和 btford 的 angular-socket 模块 (https://github.com/btford/angular-socket-io) 与其他用户(例如没有群组的 Whatsapp)进行许多 1:1 聊天。现在 A) 客户端使用 emit 加入 socket.io 房间。客户端代码是:
mySocket.emit('joinroom', room);
服务器代码是:
socket.on('joinroom', function (room){
socket.join(room);
});
B) 聊天消息通过 emit 发送到服务器。客户端代码是
mySocket.emit('sendmsg', data, function(data){
console.log(data);
});
和 C) 服务器应该通过广播向房间中的其他人发送消息。服务器代码是:
socket.on('sendmsg', function (text, room, sender, recipient, timestamp) {
// Some code here to save message to database before broadcasting to other users
console.log('This works');
socket.broadcast.to(room).emit('relaymsg', msg);
});
客户端代码是
$scope.$on('socket:relaymsg', function(event, data) {
console.log('This only sometimes works');
// do stuff to show that message was received
});
A 和 B 似乎工作正常,但 C 似乎非常不可靠。服务器代码似乎没问题,但客户端似乎没有收到消息。有时它有效,有时则无效。即“这有效”总是出现,但“这只是有时有效”并不总是出现。
1) 对导致此问题的原因有何想法?我的代码中是否有任何错误?
2) 如果有很多用户,并且所有这些用户都可以与其他用户进行多次 1:1 聊天,那么广播和聊天室是否是正确的设置方式?
如果有帮助,这是 angular-socket 模块的工厂代码
.factory('mySocket', function (socketFactory, server) {
var socket = socketFactory({
ioSocket: io.connect(server)
});
socket.forward('relaymsg');
return socket;
});
感谢您提供的任何帮助!提前致谢!
【问题讨论】:
-
你确定
C之后的客户端代码是正确的吗,$不是错字吗? -
您的 Angular 代码的哪一部分发出“socket:relaymsg”消息?
-
@MaximePiraux,不确定您指的是哪个部分,假设您的意思是“$scope.$on”...我基本上是在遵循这里的示例:github.com/btford/angular-socket-io跨度>
-
@laggingreflex(顺便说一句,用户名上哈哈),C部分下的行应该是发射的,即socket.broadcast.to(room).emit('relaymsg', msg);
-
如果你使用
DEBUG=* node app.js,你看到C正在连接还是断开?
标签: angularjs node.js sockets socket.io messaging