- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在用 java 构建一个推送服务器,并计划使用 Redis PubSub 排队发送给客户端的消息。
现在,我的实现在每个设备上都有一个 redis 订阅者。因此,当设备上线时,它会为其设备订阅一个 Redis 队列。
这个比例可以吗/有更好的方法吗?我将拥有成千上万的订阅者。
最佳答案
每台设备一个订阅者应该可以正常工作。我认为扩展问题主要围绕您向每个订阅者发布的内容以及消息的实际位置。您可能还需要考虑在某个时候运行多个 redis 实例,可能由 Redis Sentinel 管理,以确保高可用性。如果主服务器不可用,Redis Sentinel 将处理将您的一个从属 Redis 实例提升为主服务器,然后在它回来并追上时将原始主服务器提升回主服务器。
如果消息对于每个订阅者都是唯一的,那么将消息发送给每个订阅者似乎是一个不错的方法。请注意,redis 中的 pub/sub 不提供持久性,因此,如果我的订阅者断开连接或崩溃或发生任何情况并返回,则他将无法使用自他上次订阅以来发送的所有消息。如果您需要持久性,那么消息可能应该进入每个订阅者的 LIST,并且在 channel 上发布的内容应该只是通知客户端有新消息可用。然后,订阅者可以随意从 LIST 中弹出任何消息,直到 LIST 为空。每当在 channel 上收到通知时,都会重复此过程。
如果一条消息正在广播给所有或许多客户,那么您可能应该考虑将消息本身存储在 redis 键或列表或其他东西中,并在每个受影响的客户的 channel 上发布一条新消息可用以及在哪里(什么键)阅读它。您可以使用多种策略来跟踪哪个订阅者阅读了哪些消息并删除所有人阅读的旧消息。
关于java - 绝地武士很多订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20958489/
我为屏幕阅读软件构建了具有一些辅助功能的简单文本编辑器。我正在使用 Python for .NET (pythonnet) 来显示包含富文本框的表单。当用户在一段时间后按 Tab 键时,它会弹出一个上
我是 Redis、Jedis 和 Sentinel 的新手。我正在尝试使用大量网站、代码片段和教程来自学。 我有一个简单的理解问题: 一些消息来源谈到了 Redis 集群,但 Jedis 使用术语池。
我是一名优秀的程序员,十分优秀!