java - 一次连续向10000个客户端发布数据

标签 java spring-boot websocket redis apache-kafka

我正在构建一个项目,其中服务器每秒生成数据,这些数据必须到达可变数量的客户端(以千计)。服务器端没有进程发生。它从第三方 WebSocket 接收数据并将其转发给客户端。

我可以想到三种方法。

  1. 客户端每秒轮询一次。
  2. 使用 WebSockets
  3. 使用某种分布式队列。

我想用springboot2来实现这个。 主要问题是

  1. 所有客户端都应该收到特定秒的数据 在下一秒的数据生成之前。这意味着数据应该在不到一秒的时间内发布给所有人。
  2. 客户可能会在中途离开。如果他们再次重新连接 将立即获取差异数据的快照并开始增量数据 从下一秒开始流淌。

对此我有些疑惑,由于硬件限制,我无法模拟超过200个并发客户端,所以我无法得出结论。

  • 是否有客户端可以订阅的分布式队列,以及 接收数据?类似于 Kafka 但它应该能够处理 100000 个客户,动态来来去去?
  • 生成的数据非常小,可以保存在内存中。应该 我将它存储在内存中(一些 map 或 redis 缓存),客户端继续使用他们收到的最后一个 ID 进行轮询,以便我可以从内存发送数据?它会扩展吗?
  • 如果我们使用 WebSockets,服务器可以同时处理 10000 个客户端吗?如果 可能如何解决丢失数据的问题?

请帮忙。谢谢。

最佳答案

该用例是 JMS 服务器的用途,因此您可以查看这些服务器,而不是自己实现所有内容,例如Apache AMQP。

您可以尝试的另一种解决方案是使用 MultiCast,其中数据的分发由网络层本身完成,但这也可能使您回到使用此技术的 JMS 服务器,该服务器已经隐藏了您必须注意的所有内容以获得安全的数据传输。

关于java - 一次连续向10000个客户端发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894418/

相关文章:

java - 如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT token

java - 没有可用的 'repository.PersonRepository' 类型的合格 bean

php - 生成登录 token 的最佳方法是什么?这种身份验证方法是否容易受到攻击?

java - 锁定Excel工作表中的单元格值

java - 如何列出自己的 vector 元素?

java - 无法 Autowiring 。找不到 'MessagingPropertiesRefactor' 类型的 bean

java - @Poller-s 在 Spring Integration 中如何工作?

c# - javascript和C#服务器通信

perl - WebSocket 服务器从头开始显示操作码 -1

java - Maven 使用错误的类目录创建 war ,或者将已编译的类放在错误的位置