SignalR - 多个集线器 - 单独启动连接

rad*_*tei 5 javascript asp.net jquery signalr

我有一个SignalR具有多个集线器的应用程序(集线器是同一解决方案中不同项目的一部分).

在前端,我想根据用户当前正在查看的组件启动连接.

假设我有2个集线器和2个组件:TestHub1,TestHub2; Component1,Component2.

在每个组件中,我实例化连接如下:

var testHub = $.connection.testHub;

            //define client methods

            $.connection.hub.logging = true;
            $.connection.hub.start();
        });
Run Code Online (Sandbox Code Playgroud)

所以我在多个组件中这样做.现在,假设我有两个组件连接TestHub1,并TestHub2分别(在同一时间),我怎么只能停止一个连接?如果在我调用的任何组件中$.connection.hub.stop(),则两个集线器连接都已停止.

如何单独启动和停止集线器连接?(因为如果在我停止它们之后的某一点并且我打电话$.connection.hub.start(),即使我从使用的组件中调用它TestHub1, TestHub2也将启动连接.

所以我正在寻找一种方法来启动和停止单个集线器连接,而不是整个$.connection.start()$.connection.hub.stop().

谢谢!

Yur*_* A. 7

默认生成的代理类为所有集线器创建一个连接.因此,您可以让多个集线器在您的站点上共享一个连接.但是所有集线器都获得相同的HTTP请求信息. http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs

由于所有集线器共享相同的连接,因此服务器获取的唯一HTTP请求信息是建立SignalR连接的原始HTTP请求中的内容.如果使用连接请求通过指定查询字符串将信息从客户端传递到服务器,则无法向不同的集线器提供不同的查询字符串.所有中心都将收到相同的信息.

要手动管理每个集线器的连接,您需要自己实现代理:

    var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(name, message) {
    console.log(name + ' ' + message);
});
connection.start().done(function() {
    // Wire up Send button to call NewContosoChatMessage on the server.
    $('#newContosoChatMessage').click(function () {
        contosoChatHubProxy.invoke('newContosoChatMessage', $('#displayname').val(), $('#message').val());
        $('#message').val('').focus();
                });
    });
Run Code Online (Sandbox Code Playgroud)

请查看更多详细信息http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#getproxy