如何处理 socket.io 客户端聊天应用程序中的页面重新加载

2023-11-30

我正在实现一个聊天应用程序。我不在服务器中,包含 javascript 文件的页面可以是文件系统上嵌入了 javascript/socket.io 的任何 html 页面。

现在的问题是,根据定义,页面重新加载总是会触发新的请求,从而产生新的套接字。

$(document).ready(function() {

var messages = [];
socket = io.connect(connectionString);
///next code sequence
});

我想要实现的是,即使在页面重新加载之后,我的会话也应该持续存在。 现在实施的经典方法是。

1)我可以保留经典的实现。火灾断开;完成后,我实际上可以保留以前的会话 ID,并且可以从数据库重新获取以前的会话/聊天并继续。

但上述方法非常笨拙且耗时。

还有什么更好的事情可以做吗???


只要页面重新加载或用户导航,webSockets 就会断开连接并重新连接。听起来你知道,这就是它们的工作原理。

如果您希望用户有一个持久的会话,那么您只需执行与任何网页相同的操作即可使用 cookie 来识别会话或用户。如果您的站点有用户登录,当用户连接时,您可以从其登录 cookie 中获取该用户的身份,并将其用作任何 webSocket 连接的持久用户标识符。由于任何 webSocket 连接都以 http 请求开始,因此该 cookie 将始终存在。

如果/当用户重新加载或导航到站点上的另一个页面时,webSocket 将断开连接,并且当它重新连接时,用户登录 cookie 将再次出现。


如果您还没有用户登录 cookie,那么您可以在用户首次连接时检测到没有用户识别 cookie,并且您可以设置这样的 cookie,以便将来重新连接时使用它。此 cookie 中的标识符将成为您数据库的密钥,以便您可以将浏览器与给定用户的数据关联起来。

如果您的服务器需要知道用户何时真正离开,那么您可以实现某种服务器端超时,并且当用户在一段时间内(例如几分钟)保持断开连接时,很明显该用户不仅仅是在页面之间暂时导航,您可以将它们标记为现在已注销。但是,在正常的重新加载或页面导航中,用户始终会在断开连接后的几秒钟内重新连接,因此您的服务器不会将他们注销。


如果您有真正仅客户端的数据,您还可以将其存储在浏览器的本地存储中,以提高从一个页面到另一个页面时的效率(这样可以存储数据,然后在本地读取,而不是从服务器获取数据) ),但这使得数据仅在该特定计算机上的特定浏览器中可用,如果数据与用户登录相关联并且您希望该数据可供该用户使用,无论他们登录哪个浏览器或计算机,这通常不是您想要的在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 socket.io 客户端聊天应用程序中的页面重新加载 的相关文章

随机推荐