Signalr 背板不同步的信号器网络场
我们有一个signar应用程序,我们构建并测试该应用程序可在单个web服务器上使用。需求已经改变,我们需要将应用程序部署到webfarm。SignalR支持多个背板,因为应用程序已经使用了我们已经实现的Sql Server。随着第二个web节点的引入,我们遇到了一个问题,即如何保持中心内缓存的数据在节点之间同步 每个中心都有一个数据集形式的内部缓存。Signalr 背板不同步的信号器网络场,signalr,Signalr,我们有一个signar应用程序,我们构建并测试该应用程序可在单个web服务器上使用。需求已经改变,我们需要将应用程序部署到webfarm。SignalR支持多个背板,因为应用程序已经使用了我们已经实现的Sql Server。随着第二个web节点的引入,我们遇到了一个问题,即如何保持中心内缓存的数据在节点之间同步 每个中心都有一个数据集形式的内部缓存。 私有静态数据集\u缓存当客户机第一次请求数据时,缓存会被填充,从那里进行的任何交互都会更新本地缓存和sql server,然后将更改通知所有连接的
私有静态数据集\u缓存代码>当客户机第一次请求数据时,缓存会被填充,从那里进行的任何交互都会更新本地缓存和sql server,然后将更改通知所有连接的客户机
背板处理客户端之间的广播消息,但另一个节点不接收消息
我们的第一个想法是,可能有一种方法,我们可以将其连接起来,从背板向节点客户端发送消息时触发,但我们在文档中没有看到这样的事情
我们的第二个想法是在中心内创建一个.net客户端
private async void ConnectHubProxy()
{
IHubProxy EventViewerHubProxy = _hubConnection.CreateHubProxy("EventViewerHub");
EventViewerHubProxy.On<string>("BroadcastAcknowledgedEvents", EventIDs => UpdateCacheIsAcknowledged(EventIDs));
EventViewerHubProxy.On<string>("BroadcastDeletedEvents", EventIDs => UpdateCacheIsDeleted(EventIDs));
ServicePointManager.DefaultConnectionLimit = 10;
await _hubConnection.Start();
}
private async void connecthubbroxy()
{
IHubProxy EventViewerHubProxy=_-hubConnection.CreateHubProxy(“EventViewerHub”);
On(“BroadcastAcknowledgedEvents”,EventId=>UpdateCacheSAcknowledged(EventId));
On(“BroadcastDeletedEvents”,eventId=>UpdateCacheDeleted(eventId));
ServicePointManager.DefaultConnectionLimit=10;
等待连接。开始();
}
我们的问题:
我们如何保持缓存同步?
第一个想法是否可能,但我们在文档中遗漏了它?
让集线器连接到自身是否存在任何问题?建议在扩展场景中使用“状态”的方法是使用持久性源。因此,在您的情况下,如果您希望拥有一个“类似全局”的缓存,您可以通过数据库实现它
通过创建数据库,所有节点都可以从同一个源进行写/读操作,因此具有全局缓存
拥有内存缓存不是一个好主意的原因是,在web场中,如果节点宕机,它们将丢失所有内存缓存。通过持久性,无论节点是否已运行数天或刚刚从基于“关机”的故障中恢复,持久性层始终存在。这是否回答了您的问题?