【发布时间】:2015-12-17 08:28:27
【问题描述】:
假设我的服务器应用程序中有两个或更多集线器。我的 javascipt 客户端(Angular SPA)最初需要连接到第一个集线器,并且需要订阅这样的方法:
connection = $.hubConnection(appSettings.serverPath);
firstHubProxy = connection.createHubProxy('firstHub');
firstHubProxy('eventFromFirstHub', function () {
console.log('Method invokation from FirstHub');
});
connection.start().done(function (data) {
console.log("hub started");
});
一切正常。现在,我的 Angular SPA 的用户可能决定在他的页面上放置一个小部件,该小部件需要订阅来自第二个中心的方法:
secondHubProxy = connection.createHubProxy('firstHub');
secondHubProxy('eventFromSecondHub', function () {
console.log('Method invokation from SecondHub');
});
第二个集线器的方法不起作用。我猜是因为它是在connection.start() 之后创建的。
我的例子是简化的,在我的实际应用程序中,将有 20 多个中心,用户可能会或可能不会通过向其页面添加或删除小部件来订阅这些中心。
据我所知,我有两个选择:
- 调用connection.stop(),然后调用connection.start()。现在两个中心订阅都在工作。这感觉不太对,因为在所有集线器上,都会触发 OnConnected() 事件,并且我的应用程序将一直启动和停止。
- 为所有可能的集线器创建集线器代理对象,订阅虚拟 所有可能的集线器上的方法,因此应用程序可以订阅集线器 如果需要,稍后使用方法。这也感觉不对,因为我 需要创建 20 多个集线器代理,而我可能只需要几个 那些。
有人知道我可以用来完成此任务的模式吗?还是我在这里遗漏了一些非常简单的东西?
【问题讨论】:
标签: javascript asp.net signalr signalr-hub signalr.client