我有一个用Vuejs,Laravel和Nodejs编写的实时社交网络应用程序。
我有查询来获取在线用户,例如“ select * from users where is_online=1
”
请不要建议我不要保留此标志,我确实需要此标志。
要更新数据库中的此标志,请执行以下操作
socket.io
连接时,会使用
节点应用node/socket.io
应用中,我更新了{
将套接字“ is_online
”的事件设置为1 connection
”,我再次更新了
“ disconnect
”为0 它完美地工作。但是,当用户刷新浏览器时,服务器上的connect和offline事件触发两次更新数据库表。
我的问题是
我知道上一次活动的时间戳记,但这不是我的要求。 我也知道将ID保存在缓存中的技术,但是,这又不是我的要求。我想要的是“ 能够查询数据库中的在线和离线用户”
任何种类的知识都受到高度赞赏。
答案 0 :(得分:0)
结合您可以做的事情,使其变得更加灵活和可扩展-
目前尚无固定的标准方法,但方法几乎相同,但更加成熟。
在频繁的套接字事件中涉及数据库查询对性能不友好,但是,如果您确实要将任何详细信息保存到db,则可以这样做。
我使用相同的概念开发了一个应用程序(有时会达到40-50K的在线用户),并且效果非常好。
答案 1 :(得分:0)
使用JSON文件存储用户活动,并使用JSON文件更新数据库表。
创建一个active-users.JSON文件,只要新用户登录(建立套接字连接),登出(套接字连接断开)或什至在重新加载浏览器时都写入该文件,JSON文件会更新两次,因此不会对数据库创建两个不必要的请求。
然后,您可以使用Laravel控制台命令内核每30秒或1分钟读取JSON文件,以读取数据。如果发现数据有任何变化,请相应地更新数据库。