caz*_*zgp 10 javascript meteor
我正在Meteor中编写一个数据敏感的应用程序,并试图限制客户端访问尽可能多的信息.因此,我想实现服务器端计算登录和匿名用户数量的方法.
我尝试了各种方法.第一个问题是在客户端断开连接后这个问题中的服务器清理,这表明挂钩:
this.session.socket.on("close")
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做,并试图更改集合时,它抛出了"Meteor代码必须始终在光纤内运行"错误.我认为这个问题是因为一旦套接字关闭,光纤就会被杀死,因此无法访问数据库.当在服务器上调用Collection.insert作为可能的解决方案时,OP指出这个"Meteor代码必须始终在光纤内运行",但我不确定这是否是最好的方法,基于对答案的评论.
然后我尝试自动运行变量:
Meteor.default_server.stream_server.all_sockets().length
Run Code Online (Sandbox Code Playgroud)
但是自动运行似乎永远不会被调用,所以我假设变量不是一个反应上下文,我不知道如何使它成为一个.
最后一个想法是做一个keepalive风格的东西,但这似乎完全违背了流星哲学,我想我只会用作绝对的最后手段.
我执行console.log
了一些函数this.session.socket
,并且唯一可能的其他函数是.on("data")
,但是当套接字关闭时不会调用它.
我在这里有点亏,所以任何帮助都会很棒,谢谢.
为了完整起见,最好将上面的两个答案结合起来.换句话说,执行以下操作:
Meteor.users
,而不是单独的集合,如https://github.com/erundook/meteor-profile-online这可能是在Meteor中实现这一点的规范方法.我已将其创建为可以使用Meteorite安装的智能包:https://github.com/mizzao/meteor-user-status