我正在构建一个项目,其中服务器每秒生成数据,这些数据必须到达可变数量的客户端(以千计)。服务器端没有进程发生。它从第三方 WebSocket 接收数据并将其转发给客户端。
我可以想到三种方法。
- 客户端每秒轮询一次。
- 使用 WebSockets
- 使用某种分布式队列。
我想用springboot2来实现这个。 主要问题是
- 所有客户端都应该收到特定秒的数据 在下一秒的数据生成之前。这意味着数据应该在不到一秒的时间内发布给所有人。
- 客户可能会在中途离开。如果他们再次重新连接 将立即获取差异数据的快照并开始增量数据 从下一秒开始流淌。
对此我有些疑惑,由于硬件限制,我无法模拟超过200个并发客户端,所以我无法得出结论。
- 是否有客户端可以订阅的分布式队列,以及 接收数据?类似于 Kafka 但它应该能够处理 100000 个客户,动态来来去去?
- 生成的数据非常小,可以保存在内存中。应该 我将它存储在内存中(一些 map 或 redis 缓存),客户端继续使用他们收到的最后一个 ID 进行轮询,以便我可以从内存发送数据?它会扩展吗?
- 如果我们使用 WebSockets,服务器可以同时处理 10000 个客户端吗?如果 可能如何解决丢失数据的问题?
请帮忙。谢谢。
最佳答案
该用例是 JMS 服务器的用途,因此您可以查看这些服务器,而不是自己实现所有内容,例如Apache AMQP。
您可以尝试的另一种解决方案是使用 MultiCast,其中数据的分发由网络层本身完成,但这也可能使您回到使用此技术的 JMS 服务器,该服务器已经隐藏了您必须注意的所有内容以获得安全的数据传输。
关于java - 一次连续向10000个客户端发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894418/