布局和视图上的信号器连接

Signalr connection on layout and view

所以我的布局页面上有以下代码:

$(document).ready(function() {
    var connection = $.connection.notificationHub;
    connection.client.onTicketUpdated = function (model, user, notificationId) {
        ....
    }

    $.connection.hub.start().done(function () {
        console.log("Successfully connected to CoreHub.");
    });

该操作应该在任何页面上发生。所以通知可以显示在主栏中。但是我有另一个页面可以说 Index.cshtml 是通过主布局加载的。

$(document).ready(function () {
    var connection = $.connection.notificationHub;
    connection.client.onNewTicket = function (model, user, notificationId){
        ....
    };
});

有没有办法不再调用start?不会为 onTicketUpdated 创建 1 个连接而为 onNewTicket 创建另一个完整连接吗?我不能在 index.cshtml 中使用 layout.cshtml 中的 hub.start() 吗?

这已经困扰我一段时间了,我的所有研究都没有发现任何可以修复它的方法。必须有一些方法可以做到这一点,因为为 2 个简单的函数建立 2 个不同的连接似乎是大过头了。

您可以尝试在两个页面之间共享连接:

Layout.cshtml:

var connection;
$(document).ready(function() {
    connection = connection || $.connection.notificationHub;
    connection.client.onTicketUpdated = function (model, user, notificationId) {
        ....
    }
    $.connection.hub.start().done(function () {
         console.log("Successfully connected to CoreHub.");
    });
}

Index.cshtml:

$(document).ready(function() {
    connection = connection || $.connection.notificationHub;
    connection.client.onNewTicket = function (model, user, notificationId) {
        ....
    }
    //$.connection.hub.start().done(function () {
    //     console.log("Successfully connected to CoreHub.");
    //});
}