javascript - Express.js 服务器如何知道浏览器是否关闭或重新加载?

标签 javascript express

我正在开发一个使用 Express.js 服务器的项目。该服务器如何知道其任何一个用户(浏览器)是否已关闭或重新加载?

最佳答案

网络服务器没有通用的方法来知道浏览器中的页面是否已关闭,因为浏览器不会自动通知服务器该操作,并且大多数网站不需要知道。浏览器重新加载将在服务器上显示为新请求的页面加载。

检测用户页面内操作的更常见方法是使用客户端 Javascript,然后在发生您想要告诉服务器的有趣事情时向服务器发出 ajax 调用。

如果您尝试检测浏览器窗口/页面何时关闭,用于检测浏览器中页面是否已关闭的一种常见方法是使用与服务器的 webSocket 或 socket.io 连接。只要页面处于事件状态,此连接就会持续存在,但是每当浏览器关闭该页面(用户导航到其他地方、重新加载、关闭选项卡、关闭浏览器等...)时,浏览器就会关闭 webSocket 或与服务器的 socket.io 连接,服务器可以使用它作为页面已在浏览器中关闭的通知。

当然,如果用户正在重新加载,那么服务器将看到 websocket 或 socket.io 连接关闭,然后看到对页面的全新副本的请求,然后看到新的 webSocket 或 socket.io 连接已确立的。如果您想辨别页面关闭和重新加载之间的区别,那么您通常会使用某种带有用户 cookie 的计时器。当您看到原始 webSocket 或 socket.io 连接关闭时,您可以设置一个计时器一段较短的时间(例如 1 秒),如果该用户未加载页面并在该时间内重新建立新的 webSocket/socket.io 连接下一秒,那么它一定是页面关闭事件而不是页面重新加载。如果您确实在 1 秒内看到来自该用户的新页面请求,那么它一定只是页面重新加载。通常,cookie 用于标记发出请求的用户。

关于javascript - Express.js 服务器如何知道浏览器是否关闭或重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196219/

相关文章:

javascript - 同一页面上有多个 scriptcam.js,相机无法加载/显示和拍照

javascript - 如何向 .map 方法添加回调函数

javascript - 我如何用 jQuery 中的单词做数学运算?

javascript - 无法从 req.header.authorization 解码 base64

node.js - 如何将评论计数填充到项目列表中?

node.js - 在 Express 中将菜单呈现为 Jade View 部分

node.js - 语法错误 : Unexpected token import - Express

javascript - 具有倍数的 Angular $anchorScroll

javascript - jQuery sibling divs 高度相同,窗口调整大小不适用于文本换行

node.js - 在 Express 或 Connect 中添加一堆要请求的属性是不好的做法吗?