我正在Meteor中编写一个对数据敏感的应用程序,并试图限制客户端访问尽可能多的信息。因此,我想在服务器端实现一种计算已登录用户和匿名用户数量的方法。

我尝试了多种方法。正如问题Server cleanup after a client disconnects概述的那样,第一个问题建议连接到:

this.session.socket.on("close")

但是,当我这样做并尝试更改集合时,它抛出“ meteor 代码必须始终在光纤中运行”错误。我认为这个问题是因为一旦关闭套接字,光纤就会被杀死,因此无法访问数据库。 OP指出此"Meteor code must always run within a Fiber" when calling Collection.insert on server是一种可能的解决方案,但是根据答案的注释,我不确定这是否是最佳方法。

然后,我尝试对变量自动运行:
Meteor.default_server.stream_server.all_sockets().length

但是似乎从未调用过自动运行,因此我假设该变量不是 react 性上下文,并且我不确定如何使它成为一个。

最后一个想法是做一个保持活力的风格的事情,但这似乎完全与 meteor 哲学背道而驰,我想我只会把它作为绝对的不得已的手段。

我对console.log上的函数做了this.session.socket,并且唯一可能的其他函数是.on("data"),但是在关闭套接字时不会调用此函数。

我在这里有点茫然,所以任何帮助都会很棒,
谢谢。

最佳答案

为了完整起见,最好将以上两个答案结合起来。换句话说,请执行以下操作:

  • https://github.com/erundook/meteor-profile-online
  • 中的单独集合相反,将在线状态保留在Meteor.users
  • https://github.com/murilopolese/howmanypeoplearelooking
  • 一样,通过回调而不是通过心跳来跟踪断开连接

    这可能是在Meteor中实现此目标的规范方法。我已将此创建为可与Meteorite一起安装的智能软件包:https://github.com/mizzao/meteor-user-status

    关于javascript - 如何在Meteor中跟踪服务器端匿名用户的数量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13544333/

    10-12 17:38
    查看更多