【问题标题】:SignalR - multiple hubs - start connections individuallySignalR - 多个集线器 - 单独启动连接
【发布时间】:2015-09-25 07:30:19
【问题描述】:

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

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

假设我有 2 个集线器和 2 个组件:TestHub1TestHub2Component1, Component2.

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

var testHub = $.connection.testHub;

            //define client methods

            $.connection.hub.logging = true;
            $.connection.hub.start();
        });

所以我在多个组件中执行此操作。现在,假设我将两个组件分别连接到TestHub1TestHub2(同时),我怎样才能只停止一个连接?如果在我调用$.connection.hub.stop() 的任何组件中,两个集线器连接都将停止。

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

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

谢谢!

【问题讨论】:

    标签: javascript jquery asp.net signalr


    【解决方案1】:

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

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

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

        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();
                    });
        });
    

    请看这里了解更多详情http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#getproxy

    【讨论】:

    • 你仍在 $.hubConnection() 上调用 start()。那不是也启动了每个中心吗?
    • @RSinohara 好点,我问自己同样的问题。无论如何,尤里的回答仍然有效。尝试使用 contosoChatHubProxy.connection.id... 记录连接 ID
    猜你喜欢
    • 2020-01-06
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多