【发布时间】:2013-08-14 13:09:14
【问题描述】:
我们有一个 SignalR 应用程序,我们构建并测试了它可以在单个 Web 服务器上使用。需求发生了变化,我们需要将应用程序部署到 webfarm。 SignalR 支持多个背板,因为应用程序已经使用了我们已经实现的 Sql Server。随着第二个 Web 节点的引入,我们遇到了一个问题,即保持 Hub 中缓存的数据在节点之间保持同步。
每个集线器都有一个数据集形式的内部缓存。
private static DataSet _cache; 当客户端第一次请求数据时,缓存会被填充,然后任何交互都会更新本地缓存和 sql 服务器,然后通知所有连接的客户端更改。
背板处理客户端之间的广播消息,但其他节点没有收到消息。
我们的第一个想法是,可能有一种方法可以连接,从背板触发,向节点客户端发送消息,但我们还没有在文档中看到这样的事情。
我们的第二个想法是在中心内创建一个 .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();
}
我们的问题: 我们如何保持缓存同步? 第一个想法是否可能,我们在文档中错过了它? 将集线器连接到自身是否存在任何问题?
【问题讨论】:
标签: signalr