构建实时服务器的技术是什么?

时间:2018-08-14 19:23:24

标签: websocket server real-time

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

谢谢大家!

2 个答案:

答案 0 :(得分:0)

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

但是,这些主要是将事件传输或流传输到客户端的方式。需要在其之上构建一些东西。还有很多其他事情要考虑,例如:

实时API的注意事项

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

发布/订阅解决方案

有多种发布/订阅解决方案,例如:

但是,由于基于主题的发布/订阅体系结构的局限性,上述一些问题仍未得到解答,您必须自己解决。例如丢失的连接,其中Pusher has no fallbackSocketClusterPubNub has a limited queue都没有。

Resgate-实时API网关

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

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

作为Resgate的开发人员,我真的建议您检查一下它,因为它可以解决所有上述问题,并且与语言无关,简单且轻巧且运行迅速。

NATS blog上了解更多信息。

缩放

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

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

使用Resgate,只需简单地运行多个实例(这是一个简单的可执行文件),然后添加一个负载均衡器就可以在它们之间平均分配连接,从而实现第一级扩展:

enter image description here

处理1亿个并发客户端

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

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

缩放数据检索

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

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

答案 1 :(得分:-1)

Butterfly Server .NET是用C#编写的实时服务器,可让您创建实时应用程序。您可以在https://github.com/firesharkstudios/butterfly-server-dotnet上查看源。