判断用户是否在线
我想使用vue和node做一个类似网页聊天的项目。发现了一个问题,之前我做的项目都是单用户登录,没有做过两个甚至多个用户进行同时登录或之间的一些交互(由于是自己练手做的项目,没有放到服务器上,只能通过局域网),这次我想实现可以判断用户的登陆情况的功能,并且可以实时对话。如果可行的话,求各位大佬指点一下,提供一下思路,或者有类似的demo也可以,跪谢~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
判断用户是否在线的一般手段是要求用户隔一段时间发送keep alive消息以表明自己还活着,且与服务器之间的连接正常。如果超过一段时间没有收到用户(客户端)发来的keep alive消息,则可以认为这个用户离线了。
Keep alive的使用在TCP协议中已有体现,不过目的是在连接空闲时、链路上没有数据传送时,探测连接是否仍然可用:一方可以隔一段时间发送一个不带载荷的TCP数据包,而另一方在收到keep alive包后应该回复确认包,这样就可以确认连接仍然可用了。
TCP是传输层协议,而在应用层,应用可以主动发送自己定义的keep alive消息,而根据所使用的应用层协议,主动在应用层发送keep alive消息的一方可以要求另一方立刻也在应用层回复一个确认消息,或者不用回复。例如HTTP协议,客户端可以隔一段时间就向服务器发送一个keep alive请求以表存活,而服务器可以不需要在应用层额外回复相应的确认消息,因为一个HTTP请求的完成必然是需要服务器参与的,一旦请求完成,客户端就知道服务器已经收到它的请求了。
而如果你使用WebSocket,它实际上是直接在TCP协议之上的。根据其特性,用户可以与服务器保持长连接,一旦连接断开,你就可以认为客户端离线了。不过默认的配置可能需要一段时间才能反应过来客户端实际上已经意外断开连接了;如果你需要快速的知道客户端是否在线,就可以主动(在应用层)发送keep alive包并要求立刻回复确认,如果另一方没有立刻确认,就认为另一方已离线,并主动断开连接以防止另一方突然又重连回来。
现在使用得比较多的是socket.io,socket.io会帮你发送keep alive包,所以如果你使用socket.io,你就只要关心客户端的连接是否还处于连接状态就行了。
取决于你是否要精确统计?
在网上找关于websocket和socket.io两种方法,发现自己还是太嫩太嫩了,ahh,好多东西还是一窍不通,继续学习~同时也统一感谢为我解答的各位大神咯,小弟会继续努力。