为了账号安全,请及时绑定邮箱和手机立即绑定

您如何在水平扩展的应用程序上管理 websocket?

您如何在水平扩展的应用程序上管理 websocket?

Go
呼如林 2022-06-21 16:18:58
我有一个用 Golang 编写的应用程序,托管在 Google App Engine 上并使用 Firestore 作为后端。Google App Engine 水平扩展。我使用 Firebase 后端发送 websocket 消息。因此,用户连接到哪个 App Engine 实例并不重要。每次用户进行身份验证时,都会创建一个 websocket 并提供在线用户列表。在 Firestore 中,我只是将该用户的套接字连接时标记为“活动”,而当其断开连接时将该用户标记为“非活动”。我的问题是应用程序崩溃(它发生了,即使它没有发生,我也需要为此做好计划。)所有通过 Web 套接字连接到 Go Server 的用户仍被标记为活动状态。Web 客户端未连接到 Firebase。仅适用于 Go 服务器。当应用程序启动时,我无法将所有用户标记为非活动状态。因为 App Engine 加载更多实例可能会启动多个应用程序。如果我这样做了,在线的用户会因为负载而被新实例启动标记为离线。如何解决这样的问题?
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

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

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


查看完整回答
反对 回复 2022-06-21
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

有一种方法可以通过在中间有一个监控服务器(app-[monitor]-firebase)定期监控应用程序的状态来更新数据库。



查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号