Angular 单页应用和 socketio 多套接字

Angular single page app and socketio multiple sockets

我还没有找到关于这个主题的解决方案或任何信息。基本上我正在用 flask、socketio 和 angularjs 开发一个聊天应用程序。我使用 angularjs 创建了一个单页应用程序,因此当我单击例如注册按钮时,即使该页面实际上并未路由到新页面,该页面也会出现。问题是当我单击注册按钮或切换视图时,会创建另一个套接字连接。因此,当我返回聊天应用程序视图发送一条消息时,它发送了 3 条消息,因为创建了 3 个套接字。一个最初,一个当我去注册视图时,第三个套接字连接是在我返回聊天应用程序视图时创建的。所以我对这种行为有几个问题:

在非 SPA 中,这种行为还会发生吗?

在非SPA中切换页面时是否会断开套接字?

对于我的问题,我可以看到在 SPA 中更改视图会创建另一个套接字,但不会删除套接字。如何避免有多个套接字连接,这样我就不会为单个已发送消息事件发送多个 messages/events?

非常感谢大家。

In a non-SPA would this behavior still happen? Does a socket get disconnected when switching pages in a non-SPA?

在非 SPA 中,当您从一个页面移动到另一个页面时,浏览器会删除旧页面仍然打开的所有连接。每个页面在完全独立的上下文中运行。

在 SPA 中,您应该将套接字创建代码移动到顶层模块,该模块仅在应用程序初始化时运行,而不是在您从一个页面切换到另一个页面时运行。因此,您将在应用程序的整个生命周期中使用单个 socketio 实例。

对我而言,最佳做法是使用 Shared Worker 作为套接字连接的线程。保证您的应用程序的所有选项卡只有一个 Shared Worker 实例,因此您肯定只有一个套接字连接。