套接字.IO是跟踪用户是否在线的最好方法
socket.io best way to track if a user is online
如果用户有套接字连接,我需要更新一些客户端东西。
当前,当用户连接时,我会向所有人广播他"登录"
客户端(可以在服务器端执行并得到相同的结果)
// announce to everyone the user is online
socket.on('connect', function() {
socket.emit('im online');
});
服务器端
io.sockets.on('connection', function (socket) {
socket.on("im online", function (data) {
// announce the online status of a new user
socket.broadcast.emit('connected user', {"name": socket.handshake.headers.user.username});
});
});
问题是,现在我加载页面,我让每个人都知道我是"在线",因为页面加载触发事件,但如果我是偶像和另一个用户重新加载他/她的页面没有触发在我的端,所以没有迹象表明我在线。
所以我认为服务器端我可以捕获所有用户的数组谁使它到connection
并将该数组发送到任何新的客户端连接并使用它来比较用户的朋友列表,看看是否有任何用户名匹配(用户名在每种情况下都是100%唯一的)
然后当用户断开连接时,我可以从数组中删除它并让客户端知道。
这是我的解决方案,但它似乎非常无效,我希望有一个更好的解决方案。
您也可以很容易地广播断开连接事件:
socket.on("disconnect", function (data) {
// announce the offline status of a new user
socket.broadcast.emit('disconnected user', {"name": socket.handshake.headers.user.username});
});
当客户端断开连接时,服务器端会自动生成disconnect事件。
另一方面,您可能必须在服务器端存储所有已连接的用户,因为否则新连接的用户将不会收到有关已连接的其他用户的通知。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 制作一个支持mkdir和ls等基本命令的在线Linux控制台的好方法是什么
- 在 html5 上检查在线状态的最佳方法
- “对象 [对象对象] 没有方法”错误在线,但不在本地主机上!为什么
- 有没有一种方法可以自定义Kampyle、UserVoice、GetSatisfaction或OpinionLab来在线显
- 套接字.IO是跟踪用户是否在线的最好方法
- 是否有一种在线工具可以从一些远程URL获取XML,然后提供一种使用javascript通过json获取数据的方法
- 用于在线保存数据的Typescript特定方法
- 有没有一种方法,从一个在线应用程序提交表单,而不使用硒或浏览器客户端
- 一种测试基于IE7的浏览器是否在线的方法