Не удается заставить SignalR работать с двумя концентраторами

Я начал копаться в SignalR 0.4 и застрял на проблеме. Я хотел бы иметь два разных концентратора на одной странице, которые для простоты:

public class ChatHub : Hub
{
    public void Send(string message) 
    {
        Clients.addMessage(message);
    }
}

public class Chat2Hub : Hub
{
    public void Send2(string message) 
    {
        Clients.addMessage2(message);
    }
}

Это мой клиентский код:

function initChat() {
    var chat = $.connection.chat;

    chat.addMessage = function (message) {...};
    $('.send-cmd').click(function () {...});

    return $.connection.hub.start();
}

function initChat2() {
    var chat2 = $.connection.chat2;

    chat2.addMessage2 = function (message) {...};
    $('.send2-cmd').click(function () {...});

    return $.connection.hub.start();
}

$(function() {
    initChat().done(function() {
        initChat2();
    });
});

Достаточно просто, но я не могу заставить их работать вместе. В этом примере «чат» работает правильно, а «чат2» не работает (без ошибок). Если я изменю порядок инициализации, конечно, произойдет обратное.

Что мне не хватает?


person iacoware    schedule 14.02.2012    source источник


Ответы (1)


Почему вы дважды запускаете соединение с хабом. Для всех концентраторов существует одно соединение, поэтому вам нужно вызвать $.connection.hub.start() только один раз.

person davidfowl    schedule 14.02.2012
comment
Это не работает. В signalR.start() также есть проверка, которая проверяет, есть ли уже доступный транспорт, и немедленно разрешает обещание. Отличная библиотека, кстати :-) - person iacoware; 14.02.2012
comment
Что не работает? Вызов начинается один раз? У вас куча проблем с кодом. Вам необходимо подписаться на все события на всех хабах перед вызовом start. - person davidfowl; 14.02.2012
comment
Вы (конечно) правы. hub.start() должен вызываться после того, как все соединения выполнены. - person iacoware; 14.02.2012