Nginx 使用静态文件服务代替Websockets/SSE保持客户端同步

Nginx 使用静态文件服务代替Websockets/SSE保持客户端同步,nginx,websocket,server-sent-events,http-live-streaming,Nginx,Websocket,Server Sent Events,Http Live Streaming,保持客户端与服务器实时同步的常用方法是建立Websocket/SSE连接,并以这种方式推送所有更新。这显然非常有效,但也需要我们设置一个服务器来处理所有这些持久连接,并与基础设施的其余部分通信 在我研究视频流解决方案的过程中,我了解到目前的做法是将数据以静态文件的形式保存,允许客户端在需要时请求任何内容,并让像nginx这样高度优化的服务器为您完成其余工作 所以我开始思考,这是否也是信息交流的一种方式。只需将您希望客户机拥有的所有数据以静态文件的形式进行更新和同步,然后设置nginx为其提供服务

保持客户端与服务器实时同步的常用方法是建立Websocket/SSE连接,并以这种方式推送所有更新。这显然非常有效,但也需要我们设置一个服务器来处理所有这些持久连接,并与基础设施的其余部分通信

在我研究视频流解决方案的过程中,我了解到目前的做法是将数据以静态文件的形式保存,允许客户端在需要时请求任何内容,并让像nginx这样高度优化的服务器为您完成其余工作

所以我开始思考,这是否也是信息交流的一种方式。只需将您希望客户机拥有的所有数据以静态文件的形式进行更新和同步,然后设置nginx为其提供服务。利用http/2、memcached、last modified标记和请求限制等功能,可以将客户端反复轮询相同文件的开销降至绝对最小。而且我们不仅可以不必维护额外的通信协议,而且可以避免调用后端代码


我错过了什么吗?

我觉得这是倒退而不是前进。您可以查看关于SO的许多讨论,例如,和

在本文中,我们对这个问题进行了很好的讨论,您将发现与您的方法相关的一些额外成本

简言之,使用轮询(即使在优化技术之后,如您建议的“静态文件服务”/http/2/memcached等),也会比推送技术(如WebSockets)消耗更多的资源


例如,每个轮询请求都会重复执行头解析、缓存验证(必要时进行身份验证)等操作,并且可以通过推送数据轻松避免这些操作。

IMHO这将是一个倒退而不是前进的步骤。您可以查看关于SO的许多讨论,例如,和

在本文中,我们对这个问题进行了很好的讨论,您将发现与您的方法相关的一些额外成本

简言之,使用轮询(即使在优化技术之后,如您建议的“静态文件服务”/http/2/memcached等),也会比推送技术(如WebSockets)消耗更多的资源

例如,头解析、缓存验证(需要时进行身份验证)等都会对每个轮询请求重复执行,并且可以通过推送数据轻松避免

在我研究视频流解决方案的过程中,我了解到当前的解决方法是将数据以静态文件的形式保存

这种方法实际上有相当大的开销。这并不理想。人们这样做的唯一原因是重新使用现有的基于HTTP文件/blob的cdn进行视频流

延迟很高,因为必须写出和上传片段。即使您将进入客户机的段流化,也会有清单的开销。即使您删除了清单,也会有客户端请求段的开销。即使将推送与HTTP/2结合使用,所有这些复杂性仍然存在

简单地说,DASH和HLS是为解决特定需求而设计的黑客。它们是可行的唯一原因是有效载荷相对较大

所以我开始思考,这是否也是信息交流的一种方式。只需将您希望客户机拥有的所有数据以静态文件的形式进行更新和同步,然后设置nginx为其提供服务

我假设你的信息比视频数据小得多。这可能不值得花这么多钱

利用http/2、memcached、last modified标记和请求限制等功能,可以将客户端反复轮询相同文件的开销降至绝对最小

仍然有大量的开销。理想情况下,您可以使用HTTP/2并推送资源,但这同样需要专门的服务器

而且我们不仅可以不必维护额外的通信协议,而且可以避免调用后端代码

在最后,你需要考虑你所做的权衡。需要考虑的一些事项:

  • 您多久更新一次数据
  • 您的客户多长时间轮询一次更新的数据
  • 你的数据有多大
如果您不经常进行轮询,或者需要更大的数据更新,那么开销可能很小

在我研究视频流解决方案的过程中,我了解到当前的解决方法是将数据以静态文件的形式保存

这种方法实际上有相当大的开销。这并不理想。人们这样做的唯一原因是重新使用现有的基于HTTP文件/blob的cdn进行视频流

延迟很高,因为必须写出和上传片段。即使您将进入客户机的段流化,也会有清单的开销。即使您删除了清单,也会有客户端请求段的开销。即使将推送与HTTP/2结合使用,所有这些复杂性仍然存在

简单地说,DASH和HLS是为解决特定需求而设计的黑客。它们是可行的唯一原因是有效载荷相对较大

所以我开始思考,这是否也是信息交流的一种方式。只需将您希望客户机拥有的所有数据以静态文件的形式进行更新和同步,然后设置nginx为其提供服务

我假设你的信息比视频数据小得多。这可能不值得花这么多钱

利用http/2、memcached、last modified标记和请求限制等功能,可以将客户端反复轮询相同文件的开销降至绝对最小

仍然有重大的爱