Meteor:检查订阅了某个发布功能的客户端数量

时间:2013-09-11 02:13:14

标签: javascript sockets meteor publish-subscribe

有没有办法检查当前订阅的客户端数量到某个发布功能?问题是我有不同的组,每个组都有自己独特的ghash。 当用户选择离开某个组并输入一个新组时,此ghash会更改,并且会同时订阅相同的发布功能,但当然会使用不同的ghash

所以我正在寻找一种方法来检查每次订阅每个组/ ghash的客户端数量(在服务器端)。我用this之类的东西整天都在玩弄,但说实话并不好。我也在聆听" unsub"套接字事件以及所有但仍然......这就像地狱一样。

如果有人对我的整个代码感兴趣,你可以找到here! (我发现将它粘贴到我的帖子中太久了。)

我真的希望有人可以提供帮助! : - )

欢呼,P

编辑:或者换句话说:有没有办法计算当前连接到sockjs websocket的客户端数量,其中所有这些websockets都使用相同的参数调用?

=============================================== ==========================

编辑2: 新版本:LINK

由于某种原因,这根本不起作用...没有插入,因为提供给订阅的ghash绝不等于任何实际的套接字订阅( - >参见lin 20:ghash永远不等于ghash2)。我只是不明白这是怎么回事?每次会话ghash发生变化时,都会调用整个订阅功能。这个var怎么能永远不等于提交给实际socket(提交)的param? (它总是一个ghash,但总是另一组的ghash)。

我真的迷失在这里! : - (

3 个答案:

答案 0 :(得分:1)

我现在看到你正在进行直接的旧节点样式socket.io编程。我在节点项目中做过类似的事情。这可能是真正的问题。在Meteor的文档中,他们甚至不使用socket这个词。也许其他人会和你讨论这个新问题,但关于跟踪用户的这个问题可以通过这个答案得到解答。

我认为流星是一个新世界,如果你适应它的思维方式,它会为你处理这些东西。例如,创建一个消息集合,其中包含聊天室的字段。每个客户选择他们的聊天室,找到那些messages.find({chatroom:'box5'}),并显示它们。一条新消息会自动发送到正在收听该聊天室的每个客户端。让Meteor为你使用套接字。

回答计算订阅某事的客户:

伪代码: 使对象保存每个订阅签名的计数 counts = {}

on signup,创建一个唯一表示订阅的字符串,将其添加到计数对象中。 count ['params as string'] + = 1;

注销时

count ['params as string'] - = 1;

知道什么时候还没有人订阅的逻辑是这样的: done =(0 ==计数['params as string'])

答案 1 :(得分:0)

显然我现在知道不可能这样做。 我做了一些研究并尝试了很多东西,但由于某种原因,有时会打开多个websockets以将相同的数据传输到同一个客户端。 - >通过这种方法计算连接的客户端数量是不可能的。 只是在ghash更改时触发事件也不够好,因为关闭浏览器窗口不会触发它。

我认为有一个功能可以计算“查看相同数据更改”的客户端数量(想象不出更好的方式)它会很棒。也许一些流星核心开发者可以把他/她的2美分放在这里,所以我们知道这是否甚至可能。

我希望有人能在某个时候提出解决方案..我不能! :(

答案 2 :(得分:0)

我的用户状态包通过跟踪全局发布功能的订阅数来跟踪连接到Meteor应用程序的客户端数量。你也许可以从中汲取灵感。它并不是每个出版物级别的细化,但您可以对您感兴趣的出版物做同样的事情。

  

https://github.com/mizzao/meteor-user-status

需要注意的要点是

  • 每个开放会话将调用订阅(用户可能打开多个选项卡)
  • 每次用户登录时,订阅都会更新
  • 您可以在发布功能
  • 中阅读每会话ID
  • 您可以收听SockJS套接字的close事件,以便关闭浏览器标签等。

我认为为团体做这件事并不太难;我正在为另一个项目做同样的事情。