2016-04-25 73 views
1

我无法发出事件到房间在我的服务器应用程序,使用版本1.4.5Socket.io 1.4.5房间发出

我尝试这两种方式在一个房间里进行沟通,但没有奏效。

this.io.to(this.id).emit(eventName,data); 
this.io.sockets.in(this.id).emit(eventName,data); 

之前调用此,我注册用户在房间以这种方式

user.socket.join(this.id); 

进一步细节

  • this.io目的是require('socket.io')(http);

  • user.socket对象是io.on('connection', function(socket)

我省略了代码的其余部分,因为它是在过度复杂的结构和继承链,并且还irellevant到这个问题。

我不一定需要一段代码来复制,而是一种如何调试和解决问题的方法。

编辑

当我停下此刻的应用程序时,我想发出讯息,当我检查io对象,我得到以下。

io -> nsps -> '/' -> adapter -> rooms -> theRoomName -> sockets 

我的插座ID 列出。

有没有办法找出消息是否真的被发送?

编辑#2

当我检查插座对象,位于

io -> sockets -> sockets -> "socket id" -> rooms 

房间ID 目前有作为

+1

要确认的前四件事是:1)this.io的价值是什么,它应该是什么。 2)'this.id'的价值是什么,它应该是什么。 3)什么是'eventName'? 4)客户端是否真的在侦听'eventName'消息? – jfriend00

+1

您可以追踪服务器上调试器中的'.emit()'函数调用,看看它是否认为它应该实际发送消息并查看它的功能。您可以在服务器上使用网络跟踪(如WireShark或Ethereral)以查看它是否实际发送任何内容。您可以使用Chrome调试器中的“网络”选项卡查看消息是否到达客户端。 – jfriend00

+0

非常感谢您关注此事。所有这些变量都被正确设置了,我在发布之前确定了。这是它的第四个步骤。在客户重构期间,我忘记为该事件附加一个监听器。再次感谢大家,如果你能够创建一个答案,我会很乐意接受它 – Slytherin

回答

0

使我的评论到每一个答案您的要求:

要确认的前四件事是:

  1. this.io的值是多少?它应该是什么?
  2. this.id的值是多少?它应该是什么?
  3. 什么是eventName
  4. 客户端是否真的在收听eventName消息?

此外,您可以使用服务器调试器跟踪到.emit()并查看它实际上是否打算发送消息。

然后,您可以使用WireShark或Ethereal等服务器上的网络跟踪来验证服务器是否实际发送消息。

然后,您可以使用Chrome调试器中的网络选项卡查看消息是否实际到达浏览器页面。


后记:听起来项目4以上是问题实际上是。