SignalR Scaleout获取消息

时间:2015-08-30 21:44:45

标签: signalr signalr-backplane

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

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

是否还要订阅获取服务器和背板之间正在进行的事件,以便我可以保持两个缓存同步?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

由于Microsoft有一个示例来执行此操作,因此支持所有内容,您甚至可能只使用pub.sub机制(尽管有2个服务执行此操作 - SQLRedis可能不会值得)。

无论如何,我就是这样做的。

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