有没有办法检查当前订阅某个发布函数的客户端的数量?问题是我有不同的组,每个组都有自己独特的ghash。当用户选择离开一个组并进入一个新组时,这个ghash会发生变化,并且订阅相同的发布功能,当然,使用的是不同的ghash。
因此,我正在寻找一种方法来检查每个组/ghash一次订阅了多少个客户端(在服务器端)。我整天都在摆弄像this这样的东西,但老实说,它工作得并不是很好。我也在监听套接字的“不明人物”事件,但还是...这一切都是错误的地狱。
如果有人对我的整个代码感兴趣,你可以找到它的here!(我发现在这里粘贴到我的帖子中太长了。)
我真的希望有人能帮忙!:-)
干杯,P
EDIT:或者换句话说:有没有办法统计当前连接到sockjs websocket的客户端数量,其中所有这些websocket都是用相同的参数调用的?
=========================================================================
编辑2:新版本:LINK
由于某些原因,这根本不起作用……没有进行插入,因为提供给订阅的ghash永远不会等于任何实际的套接字订阅(-->参见LIN20: ghash永远不会等于ghash2)。我只是不明白这怎么可能?每次会话ghash更改时,都会调用整个订阅函数。这个变量怎么可能永远不等于提交给实际套接字的参数呢?(它也总是一个ghash,但总是另一个组的ghash )。
我真的迷路了!:-(
发布于 2013-09-11 13:58:45
我现在看到您正在进行老式的节点风格的socket.io编程。我在node项目中也做过类似的事情。这可能是真正的问题所在。在Meteor的文档中,他们甚至没有使用socket这个词。也许其他人会和你讨论这个新问题,但这个关于跟踪订阅者的问题就是这个答案。
我认为流星是一个新的世界,如果你适应它的思维方式,它会为你处理这些事情的。例如,收集一组消息,并为聊天室设置一个字段。每个客户端选择他们的聊天室,找到这些聊天室({messages.find:‘box5’}),并显示它们。一条新消息会自动发送到正在收听该聊天室的每个客户端。让Meteor为你使用套接字。
对订阅的客户进行计数的答案:
伪代码:创建一个对象来保存每个订阅签名的计数= {}
在注册时,创建一个唯一表示订阅的字符串,将其添加到您的计数对象中。counts‘’params as string‘+= 1;
on signout counts‘’params as string‘-= 1;
知道何时没有人订阅的逻辑是这样的: done = (0 ==将‘’params as string‘计算)
发布于 2013-09-14 10:26:37
显然,据我所知,到目前为止还不可能做到这一点。我做了一些研究,尝试了很多方法,但由于某些原因,有时会打开多个websockets,以便将相同的数据传输到同一个客户端。-->无法通过这种方式统计连接的客户端数。当我的ghash改变时仅仅触发事件也是不够的,因为关闭浏览器窗口不会触发它。
我认为拥有一个计算“查看相同数据变化”的客户端数量的功能(想不出更好的方式来表达它)将是非常棒的。也许一些流星核心开发人员可以在这里输入他/她的2美分,这样我们就可以知道这是否可能。
我希望有人能在某一时刻提出一个解决方案..我不能!:(
发布于 2013-09-16 13:40:26
我的用户状态包通过跟踪全局发布功能的订阅数量来跟踪连接到Meteor应用程序的客户端数量。你也许能从中得到一些启发。它在每个出版物级别上不是细粒度的,但是您当然可以对您感兴趣的出版物做同样的事情。
需要注意的要点是
close事件,以了解浏览器选项卡是否关闭等。我不认为为小组做这件事太难;我正在为另一个项目做同样的事情。
https://stackoverflow.com/questions/18731616
复制相似问题