登录
首页 >  Golang >  Go问答

管理 Websocket 在水平扩展的应用程序中的方法

来源:stackoverflow

时间:2024-03-16 08:45:29 496浏览 收藏

水平扩展应用程序中管理 WebSocket 连接至关重要。使用 Google App Engine 时,当应用程序实例崩溃或扩展时,可能会导致连接用户仍被标记为活动状态。为了解决这个问题,建议从后端的角度管理连接状态,确保后端始终保持连接。这可以通过引入中间监视服务器来实现,该服务器负责监控 WebSocket 连接并更新后端中的活动状态。

问题内容

我有一个用 Golang 编写的应用,托管在 Google App Engine 上,并使用 Firestore 作为后端。

Google App Engine 水平扩展。

我使用 Firebase 后端发送 Websocket 消息。因此,用户连接到哪个 App Engine 实例并不重要。

每次用户进行身份验证时,都会创建一个 Websocket 并提供在线用户列表。

在 Firestore 中,我只是在套接字连接时将该用户标记为“活动”,在断开连接时将该用户标记为“非活动”。

我的问题是应用程序崩溃(它发生了,即使没有,我也需要为此做好计划。)所有通过 Web 套接字连接到 Go 服务器的用户仍然被标记为活跃。

网络客户端未连接到 Firebase。仅到 Go 服务器。

应用启动时,我无法将所有用户标记为非活动状态。因为由于 App Engine 加载更多实例,可能会启动多个应用程序。如果我这样做,在线用户将因负载而启动的新实例被标记为离线。

如何解决这样的问题?


解决方案


您的问题尚不清楚,但听起来您希望客户端应用程序可以根据套接字的连接来管理活动状态。这根本行不通,部分原因是您在这里的观察结果,而且还因为如果客户端完全失去连接,它也将无法更新后端的状态。

您应该从后端的角度使用 websocket 管理连接状态。它永远不应该失去连接。 (事实上​​,这就是实时数据库管理其 presence 的方式。)

有一种方法可以通过在中间设置监控服务器(app-[监视器]-firebase)。

以上就是《管理 Websocket 在水平扩展的应用程序中的方法》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>