首页 > 解决方案 > 将大量数据推送到浏览器的简单服务器?

问题描述

我正在构建一个使用从 Server 推送的数据的 Web 应用程序。

每条消息都是 JSON,可能很大,有数百 KB,消息每分钟发送几次顺序无关紧要

服务器应该能够保留尚未传递的消息,可能会为客户端存储几兆字节数天,直到客户端无法上网。未发送消息的存储大小有限制,例如每个客户端 20mb,当超过此限制时,旧的未传递消息将被删除。

服务器应该能够处理大约1000 个同时连接。如何简单地实施

可能的解决方案

我在想也许将消息作为文件存储在磁盘上并使用浏览器池 1 秒,以检查新消息并使用 NGinx 或类似的东西提供它?对于此类用例,NGinx 是否有一些配置/模块?

或者也许最好将 MQTT 服务器或一些消息队列(如 Rabbit MQ)与一些浏览器适配器一起使用?

标签: websocketpushmqttmessage-queue

解决方案


实际上,MQTT 支持跨客户端连接持续存在会话的概念,客户端必须首先连接并请求“非干净”会话。之后,如果客户端断开连接,代理将保留所有发往该客户端的 QoS=1 或 2 消息,直到重新连接。

使用 MQTT v3.x,从技术上讲,服务器应该永远保存所有这些断开连接的客户端的所有消息!每条消息的最大有效负载为 256MB,但服务器应该保存您提供的所有内容。这给 MQTT v5 修复的服务器带来了一个大问题。大多数现实世界的经纪人都有可配置的设置。

但是,如果连接是通过不可靠的网络(无线、蜂窝调制解调器等),可能会意外断开并重新连接,那么 MQTT 会大放异彩。

如果客户端通过相当可靠的网络连接,那么带有 RabbitMQ 的 AMQP 会更加灵活,因为客户端可以创建和管理单独的队列。但巧妙的是,您可以使用 RabbitMQ 混合这两种协议,因为它有一个 MQTT 插件。因此,不可靠网络上的较小客户端可以通过 MQTT 连接,其他客户端可以通过 AMQP 连接,并且它们都可以相互通信。


推荐阅读