原因socket.io不发送消息?

我正在使用angular度/节点应用程序,人们可以使用socket.io和btford的angular度sockets模块( https://github.com/btford/angular )与其他用户(如Whatsapp,无组群)进行1:1聊天-socket-io )。 现在A)一个客户端join一个socket.io房间使用发射。 客户端代码是:

mySocket.emit('joinroom', room); 

服务器代码是:

 socket.on('joinroom', function (room){ socket.join(room); }); 

B)聊天消息通过发送发送到服务器。 客户端代码是

 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度sockets模块的工厂代码

 .factory('mySocket', function (socketFactory, server) { var socket = socketFactory({ ioSocket: io.connect(server) }); socket.forward('relaymsg'); return socket; }); 

欣赏任何帮助,您可以提供! 提前致谢!

感谢大家的意见,我相信我find了主要的问题。 我认为有两件事情会造成问题:

1)我认为更大的问题是我使用节点集群,结果是用户可能会join不同的工作人员的房间,无法互相沟通。 我已经按照这里的说明添加了粘性会话和Redis: http : //socket.io/docs/using-multiple-nodes/

粘滞会话是相当有用的,就像文档没有提到它一样,只是作为参考,模块自动创build工人,如果遇害,则重新生成

我找不到很多关于如何实现sticky + redis的例子,因为socket.io 1.0是相对较新的,似乎与之前版本中的Redis不同,但是这些非常有帮助:

https://github.com/Automattic/socket.io-redis/issues/31

https://github.com/evilstudios/chat-example-cluster/blob/master/index.js

2)每次用户closures手机,即使聊天室是电话上打开的最后一个屏幕,也会将其与聊天室断开连接

希望能帮助未来的人!