构建实时服务器的技术有哪些?

问题描述 投票:0回答:2

我是后端开发人员,我想知道构建实时服务器的常用技术是什么。我知道我可以使用像Firebase这样的服务,但我真的想创建它。我有一些在Java上使用Websockets的经验,但我想知道更多实现实时服务器的方法。当我说实时时,我指的是像Facebook这样的东西。我也想知道如何扩展实时服务器。

谢谢你们!

websocket server real-time
2个回答
1
投票

我在多个论坛上都问了同样的问题。这个问题的常见答案仍然很奇怪:

但这些主要是向客户传输或传输事件的方式。需要建立一些东西。还有许多其他事项需要考虑,例如:

实时API的注意事项

要发送给客户的事件 如何仅向每个客户发送他们需要的事件 如何处理事件授权 在哪里保持对事件订阅的状态(对于无状态服务) 如何从丢失的连接和服务崩溃中恢复错过的事件 为搜索或分页查询生成事件 如何扩展

发布/订阅解决方案

那里有多个pub / sub解决方案,例如:

但由于基于主题的pub / sub架构的限制,上述一些问题仍未得到解决,必须由您自己处理。例子是丢失的连接,其中Pusher has no fallbackSocketClusterPubNub has a limited queue

救援 - 实时API网关

传统的基于主题的发布/订阅模式的替代方法是使用资源感知的实时API网关,例如Resgate

网关不是订阅主题的客户端,而是跟踪客户端提取的资源(对象或数组),使客户端数据保持最新状态,直到取消订阅为止。

作为Resgate的开发人员,我真的可以推荐检查它,因为它解决了上述所有问题,语言无关,简单,重量轻,速度极快。

NATS blog了解更多信息。

缩放

假设您想要同时扩展并发客户端数量和生成的事件数量。您最终需要确保每个客户端只通过传统的基于主题的发布/订阅或通过资源订阅获取他们感兴趣的数据。所有上述解决方案都可以处

我还假设所有上述解决方案都允许您添加更多处理持久WebSocket连接的节点/服务器来扩展并发客户端。

使用Resgate,只需运行多个实例(它是一个简单的可执行文件),并添加一个负载平衡器,在它们之间均匀分配连接,即可完成第一级扩展:

enter image description here

处理100M并发客户端

假设一个Resgate实例处理10000个持久性WebSocket连接,您可以将10000个Resgates(分布到多个数据中心)添加到单个NATS Server。这将允许总共100M连接。当然,根据您的数据,您可能还有其他扩展问题,例如网络流量;)。

第二层扩展(和添加冗余)是将整个设置复制到不同的数据中心,并使服务使用其他工具(如Kafka,CockroachDB等)在数据中心之间同步数据。

Scaling data retrieval

使用仅处理事件的传统发布/订阅解决方案,您还必须处理HTTP(REST)请求的扩展。

使用Resgate,这不是必需的,因为资源数据也是通过WebSocket连接获取的。这允许Resgate不仅确保资源数据和事件同步(另一个问题与单独的pub / sub解决方案),而且还可以缓存数据。如果多个客户端请求相同的数据,Resgate只需要从服务中获取一次,从而有效地提高了可伸缩性。


-1
投票

Butterfly Server .NET是一个用C#编写的实时服务器,允许您创建实时应用程序。你可以在https://github.com/firesharkstudios/butterfly-server-dotnet看到来源。

© www.soinside.com 2019 - 2024. All rights reserved.