我和我的同事想构建一个聊天应用程序(ReactJS NodeJS),我们一直在寻找最好的框架来实现这一点。 FeathersJS 似乎无疑是最稳定且功能丰富的 socket.io 包装器。
然而,由于我们希望允许我们的应用程序扩展,因此我们决定将此聊天功能拆分到与主节点后端不同的节点进程中。
然而,聊天功能仍然需要身份验证和授权,我们希望避免对这两项服务进行重复身份验证。因此,我们提供的解决方案是使用会话 cookie 查询主节点后端,以在用户使用聊天服务之前对用户进行身份验证。
FeathersJS 是否会建立持久的套接字连接,或者是否会为发送/接收的每条消息建立套接字连接?在第一种情况下,我们可以继续我们的架构,而在第二种情况下,我们必须进行审查,因为这会在主后端产生高负载。
Thanks!
分割服务的方法有多种,每种方法都有各自的优点和缺点。对于 Feathers 来说,一件普遍重要的事情是没有会议,只有JSON 网络令牌。 JWT 是无状态的,可以被共享相同秘密的任何服务器读取,因此不必有中央会话存储。我能想到的两个主要选择是:
- 有一个主应用程序来处理授权并管理所有连接的客户端,但它们没有与数据库通信的服务,而是连接到内部网络中单独的简单 API 服务器。这是更容易的设置,优点是内部 API 服务器可以非常简单,并且根本不需要身份验证(因为主应用程序被允许执行所有操作,并将根据经过身份验证的用户限制进行查询)。缺点是主应用程序仍然是瓶颈(但负载有所减少,因为它基本上充当内部 API 的代理)。
- 每个客户端都使用 JWT 连接到他们需要的每个 API 服务器。 JWT 由单独的身份验证(或用户)API 创建。这是更具可扩展性的解决方案,因为唯一的瓶颈是从公共用户服务中检索最新的用户信息(这甚至可能并不总是必要的)。缺点是在客户端管理起来更加复杂,并且必须在每台服务器上配置身份验证(至少对于 JWT 而言)。然而,由于 JWT 的无状态性,不需要任何共享会话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)