在离开页面/页面closures时从用户散列中删除某人
我正在构build一个Node.js / Socket.io项目。
我有基于他们的websocket id的用户散列。 当用户提出以下请求时,我想将其添加到查看该页面的一组用户。
app.get('/board/:id', function(req, res){}
我想保留一些类似的东西
Browsing = {username:id,username:id,…}
不过, 我不确定如何删除用户可以说,如果他们离开页面。 是否有某种function在页面离开时被调用?
部分解决scheme:
以下似乎在Chrome上做的伎俩:
$(window).unload(function(){ var username = $('#username').text(); var pid = currentProject; var data = { username: username, id : pid } socket.emit('leaving-page', data); })
有没有什么function,被称为页面离开? …
是的,但不可靠。
人们跟踪谁在线,谁不在线的方式通常是这样的:
- 添加用户上次刷新/访问页面的时间
- 设置一个限制,你认为他们离线
你可以拦截与离开页面相对应的事件。 有几种方法可以做到这一点,看看下面的链接,让我知道是否有任何适合您的需求,如果我可以回答任何更明确的问题:
- 拦截页面退出事件
- 检测用户何时离开网页的最佳方法?
- jquery卸载
与最后一个链接,你可以做这样的事情:
$(window).unload(function() { //remove the user from your json object with delete json_object[key]; });
希望这可以帮助。
由于您使用的是Socket.io,服务器会知道用户何时离开页面,因为套接字将被断开。 只要听取disconnect
事件。
io.sockets.on('connection', function (socket) { ... socket.on('disconnect', function () { // The user on `socket` has closed the page }); });
更好的做法是利用命名空间并让Socket.io处理所有的连接/断开操作(无论如何,无需重复工作)。
在客户端上,
socket = io.connect('http://example.com/pagename');
pagename
不需要在你的域上指向一个有效的URL – 这只是你将在服务器代码中使用的命名空间:
io.sockets.clients('pagename')
获取当前连接到pagename
名称空间的所有客户端。
- 在Javascript中,为什么Object.getPrototypeOf()返回一个空列表?
- 带callback的链类方法?
- 谷歌oauth 2.0 API密码更改用户名和密码不被接受
- 与本地客户端的Socket.io。 Origin null和Access-Control-Allow-Origin
- (Node.js)如何获取存储在服务器中的二进制文件的URL?
- TypeError:任务不是asynchronousjs平行的函数
- 在Mac上使用cython和emscripten编译平凡的python程序到javascript
- 在Azurefunction上使用web3.js调用以太坊
- node.js和routing:按类发出