Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signalr 背板不同步的信号器网络场_Signalr - Fatal编程技术网

Signalr 背板不同步的信号器网络场

Signalr 背板不同步的信号器网络场,signalr,Signalr,我们有一个signar应用程序,我们构建并测试该应用程序可在单个web服务器上使用。需求已经改变,我们需要将应用程序部署到webfarm。SignalR支持多个背板,因为应用程序已经使用了我们已经实现的Sql Server。随着第二个web节点的引入,我们遇到了一个问题,即如何保持中心内缓存的数据在节点之间同步 每个中心都有一个数据集形式的内部缓存。 私有静态数据集\u缓存当客户机第一次请求数据时,缓存会被填充,从那里进行的任何交互都会更新本地缓存和sql server,然后将更改通知所有连接的

我们有一个signar应用程序,我们构建并测试该应用程序可在单个web服务器上使用。需求已经改变,我们需要将应用程序部署到webfarm。SignalR支持多个背板,因为应用程序已经使用了我们已经实现的Sql Server。随着第二个web节点的引入,我们遇到了一个问题,即如何保持中心内缓存的数据在节点之间同步

每个中心都有一个数据集形式的内部缓存。
私有静态数据集\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场中,如果节点宕机,它们将丢失所有内存缓存。通过持久性,无论节点是否已运行数天或刚刚从基于“关机”的故障中恢复,持久性层始终存在。

这是否回答了您的问题?