我遇到了 Socket.io 在页面导航发生之前接收消息的问题 - 通常当消息是导航触发的某些服务器端操作的直接结果时。
我现在看到的是这样的:
- Socket.io 连接
- 用户触发页面导航(提交表单、刷新等)
- 服务器端逻辑向 socket.io 服务器发送请求,该服务器立即将事件分派给仍然连接的客户端
- 客户端接收并确认请求(我很确定socket.io内置了一些消息确认,如果我错了,请纠正我),并向用户显示通知,但随后......
- socket.io 连接在原始页面上关闭
- 新页面加载并显示
- Socket.io 打开一个新连接,但没有新消息,因为最后一个已收到并确认。
这本身并不是一个真正的错误,因为我认为期望 Socket.io 在导航发生之前关闭连接是不合理的。但是,我不确定处理此问题的最佳方法是什么。目前,我一次为每个客户端打开一个连接,并在新连接时关闭另一个。但是在这种情况下不会发生这种情况,因为第一个在第二个连接之前已经关闭。我也可以保留所有客户端的列表,但这也不能解决这个问题,因为第一个连接仍然会收到消息。
有人可以建议解决此问题的方法,以确保用户始终看到消息通知吗?