SignalR Scaleout 获取消息

SignalR Scaleout get the messages

我有一个使用 SignalR 的聊天功能,并且有一个 sql 服务器背板。当人们聊天时,消息会很好地显示在两台服务器上。但是,如果刷新页面,显然聊天记录没有了。

所以当人们说些什么时,我会将其缓存在内存中的字典中。问题是,该消息不在其他服务器的内存中,因此如果有人刷新并且他们进行了负载平衡,则该消息不会出现。

是否可以订阅获取服务器和背板之间发生的事件,以便我可以使两个缓存保持同步?

谢谢!

处理此问题的最简单方法是将消息保存在数据库中,您试图避免的事情可能是因为 SQL 不是最快的数据库。

现在,我会使用另一个 SignalR 背板 - with Redis,原因如下:

  • Redis 是一个内存缓存,所以每次操作都会快得多(因为所有内容都加载到 RAM 中)
  • 您拥有与 SQL 背板相同的功能
  • Redis 有非常好的 pub/sub 服务,这正是您在这里需要的。
  • 如果你将它们存储在 Redis 中,你实际上可能不需要字典,这真的很快

因为微软有一个这样做的例子,所以一切都得到支持,你甚至可以只使用 pub.sub 机制(尽管有 2 个服务这样做 - SQLRedis 可能不值得)。

无论如何,这就是我要进行的方式。

希望这对您有所帮助。祝你好运!