3

有没有办法检查当前订阅的客户端数量到某个发布功能?问题是我有不同的组,每个组都有自己独特的ghash. 当用户选择离开一个组并进入一个新组时,这个 ghash 会发生变化,并且订阅了 THE SAME 发布功能,尽管ghash当然有所不同。

所以我正在寻找一种方法来检查一次有多少客户端订阅了每个组/ghash(在服务器端)。我整天都在摆弄像这样的东西,但老实说它并没有那么好用。我也在监听套接字的“取消订阅”事件以及所有这些,但仍然......这都是地狱般的越野车。

如果有人对我的整个代码感兴趣,你可以在这里找到!(我发现它太长了,无法将其粘贴到我的帖子中。)

我真的希望有人能帮忙!:-)

干杯,P

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

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

编辑 2:新版本:链接

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

我真的迷路了!:-(

4

3 回答 3

1

我现在看到您正在做直接的旧节点样式 socket.io 编程。我在节点项目中做过类似的事情。这也许是真正的问题。在 Meteor 的文档中,他们甚至不使用套接字这个词。也许其他人会和你一起讨论这个新问题,但是这个关于跟踪订阅者的问题是由这个答案回答的。

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

对订阅某项内容的客户计数的回答:

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

在注册时,创建一个唯一代表订阅的字符串,将其添加到您的计数对象中。counts['params as string'] += 1;

注销计数['params as string'] -= 1;

知道什么时候仍然没有人订阅的逻辑是:done = (0 == counts['params as string'] )

于 2013-09-11T05:58:45.290 回答
0

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

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

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

于 2013-09-14T02:26:36.940 回答
0

我的用户状态包通过跟踪全局发布功能的订阅数量来跟踪连接到 Meteor 应用程序的客户端数量。你或许可以从中得到一些启发。它在每个出版物级别上并不精细,但您当然可以对您感兴趣的出版物做同样的事情。

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

需要注意的主要点是

  • 每个打开的会话都会调用订阅(用户可能打开了多个选项卡)
  • 每次用户登录我们的退出时,订阅都会更新
  • 您可以在发布功能中读取每个会话的 ID
  • 您可以监听closeSockJS 套接字的事件以关闭浏览器选项卡等。

我不认为对团体来说这样做太难了。我正在为另一个项目做同样的事情。

于 2013-09-16T05:40:26.390 回答