Могу ли я установить 2 подключения SignalR? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть базовое c приложение чата, настроенное следующим образом:

$(function () {
// Set up references for other functions to call
   chatConnection = $.connection.chatHub;
   // Set up callbacks before starting server connection
   chatConnection.client.addNewMessageToPage = function (name, message) {
      var prettyMessage = name + ':' + message;
      $('#chatHistory').append(prettyMessage);
      $("#chatHistory").animate({ scrollTop: $('#chatHistory').prop("scrollHeight") }, 10);
   };
   // Start up connection to server, set up events
   $.connection.hub.start().done(function () {
      $('#sendChatButton').click(function () {
        // Call the Send method on the hub.
        chatConnection.server.sendMessage($('#displayName').val(), $('#chatBox').val());
        // Clear text box and reset focus for next comment.
        $('#chatBox').val('').focus();
      });
   });
});

Это вызывает мою серверную часть ChatHub.cs, и я получаю и отправляю сообщения, как и следовало ожидать.

public void SendMessage(string name, string message)
{
    Clients.All.addNewMessageToPage(name, message);
}

Теперь хочу добавить функционал. У меня есть новый класс, почти идентичный моему ChatHub, под названием «GameHub», и его задача - обрабатывать ходы, а не обрабатывать чат. Пока у меня есть что-то вроде этого:

$(function () {
// Set up references for other functions to call
   chatConnection = $.connection.chatHub;
   gameConnection = $.connection.gameHub;
   // Set up callbacks before starting server connection
   chatConnection.client.addNewMessageToPage = function (name, message) {
      var prettyMessage = name + ':' + message;
      $('#chatHistory').append(prettyMessage);
      $("#chatHistory").animate({ scrollTop: $('#chatHistory').prop("scrollHeight") }, 10);
   };
   gameConnection.client.receiveMove = function (name, move){
      alert(name + ' played ' + move);
   };
   // Start up connection to server, set up events
   $.connection.hub.start().done(function () {
      $('#sendChatButton').click(function () {
        // Call the Send method on the hub.
        chatConnection.server.sendMessage($('#displayName').val(), $('#chatBox').val());
        // Clear text box and reset focus for next comment.
        $('#chatBox').val('').focus();
      });
      $('#sendMoveButton').click(function () {
        gameConnection.server.sendMove(getMove());
      });
   });
});

, но на сервер ничего не попадает. Это потому, что я неправильно его настроил? Может ли signalR поддерживать даже 2 концентратора, или он должен быть одним концентратором и «спицами» оттуда к моим 2 различным функциональным областям?

1 Ответ

1 голос
/ 04 августа 2020

Можно, но, учитывая отсутствие разницы в производительности, проще разместить эти функции в одном концентраторе. Все данные попадут во все концентраторы, поскольку все они используют одно и то же соединение.

Как указано здесь .

Вы можете проверить, поскольку он не предоставлен, ваш игровой концентратор и метод чтобы убедиться, что вы правильно назвали их и правильно разместили на стороне сервера. Возможные проблемы ...

...