首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将请求委托给服务器和Websockets问题的平衡器

将请求委托给服务器和Websockets问题的平衡器
EN

Software Engineering用户
提问于 2018-08-15 16:15:36
回答 1查看 56关注 0票数 2

让我们有一个具有实时聊天功能的应用程序。聊天需要websockets来实现实时功能。

现在假设我们有“平衡器”和3台应用服务器。在每个服务器上运行应用程序实例。

平衡器委托给这3台服务器中的1台,例如基于流量。

我的问题是,如何处理websockets?示例:

代码语言:javascript
复制
1) User A logs into an applicition
2) Balancer delegates user A to server 1
3) Web socket is created for user A on server 1

4) User B logs into an applicition
5) Balancer delegates user B to server 3
6) Web socket is created for user B on server 3

7) User A wants to set message to user B
8) Instance of application on server 1 looks for web sockes for user B

用户B的Web套接字存在于服务器3,而不是服务器1。

如何处理这种情况?应该在应用程序级别(例如,通过数据库/消息同步应用程序实例)还是在“平衡器”上进行一些配置?

谢谢你帮忙。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2018-08-15 17:00:35

除非你事先知道谁想和谁沟通,否则你将无法在平衡器级别上解决这个问题。如果用户必须在连接之前选择聊天室,您可以为每个会话分配一个固定的服务器(根据一个确定性函数计算它,以聊天室ID/名称为参数,给出一个服务器实例作为结果)。

否则,将发布订阅模式中的所有应用程序服务器互连。如果User A发送消息给Server 1 for User B,但是这个用户没有连接到服务器,那么它应该用topic User B将消息转发到发布子网络。如果另一台服务器(如Server 3 )连接到User B,则订阅主题User B并将消息推送给该用户。

这基本上就是发生的事情:

  1. 当用户连接到应用服务器时,应用服务器开始订阅专用于该用户的主题。
  2. 用户向服务器发送特定收件人的消息。
  3. 如果服务器已经连接到收件人,它只会推送消息。
  4. 否则,服务器将消息发布到此用户的专用主题。
  5. 当服务器通过发布子网络接收消息时,它代表另一个服务器将消息推送给连接的用户。
  6. 当用户断开与应用程序服务器的连接时,服务器将从主题中取消订阅。
票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/376922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档