SignalR Scaleout 获取消息
SignalR Scaleout get the messages
我有一个使用 SignalR 的聊天功能,并且有一个 sql 服务器背板。当人们聊天时,消息会很好地显示在两台服务器上。但是,如果刷新页面,显然聊天记录没有了。
所以当人们说些什么时,我会将其缓存在内存中的字典中。问题是,该消息不在其他服务器的内存中,因此如果有人刷新并且他们进行了负载平衡,则该消息不会出现。
是否可以订阅获取服务器和背板之间发生的事件,以便我可以使两个缓存保持同步?
谢谢!
处理此问题的最简单方法是将消息保存在数据库中,您试图避免的事情可能是因为 SQL
不是最快的数据库。
现在,我会使用另一个 SignalR
背板 - with Redis,原因如下:
Redis
是一个内存缓存,所以每次操作都会快得多(因为所有内容都加载到 RAM 中)
- 您拥有与
SQL
背板相同的功能
Redis
有非常好的 pub/sub 服务,这正是您在这里需要的。
- 如果你将它们存储在
Redis
中,你实际上可能不需要字典,这真的很快
因为微软有一个这样做的例子,所以一切都得到支持,你甚至可以只使用 pub.sub 机制(尽管有 2 个服务这样做 - SQL
和 Redis
可能不值得)。
无论如何,这就是我要进行的方式。
希望这对您有所帮助。祝你好运!
我有一个使用 SignalR 的聊天功能,并且有一个 sql 服务器背板。当人们聊天时,消息会很好地显示在两台服务器上。但是,如果刷新页面,显然聊天记录没有了。
所以当人们说些什么时,我会将其缓存在内存中的字典中。问题是,该消息不在其他服务器的内存中,因此如果有人刷新并且他们进行了负载平衡,则该消息不会出现。
是否可以订阅获取服务器和背板之间发生的事件,以便我可以使两个缓存保持同步?
谢谢!
处理此问题的最简单方法是将消息保存在数据库中,您试图避免的事情可能是因为 SQL
不是最快的数据库。
现在,我会使用另一个 SignalR
背板 - with Redis,原因如下:
Redis
是一个内存缓存,所以每次操作都会快得多(因为所有内容都加载到 RAM 中)- 您拥有与
SQL
背板相同的功能 Redis
有非常好的 pub/sub 服务,这正是您在这里需要的。- 如果你将它们存储在
Redis
中,你实际上可能不需要字典,这真的很快
因为微软有一个这样做的例子,所以一切都得到支持,你甚至可以只使用 pub.sub 机制(尽管有 2 个服务这样做 - SQL
和 Redis
可能不值得)。
无论如何,这就是我要进行的方式。
希望这对您有所帮助。祝你好运!