我可以设置2个SignalR连接吗?

时间:2020-08-04 07:32:51

标签: signalr

我有一个基本的聊天应用程序设置如下:

$(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 个答案:

答案 0 :(得分:1)

您可以但由于没有性能差异,因此将这些功能集中在一个集线器中更为简单。所有数据将到达所有集线器,因为它们都共享相同的连接。

here所述。

您可以检查(由于未提供)您的游戏中心和方法,以确保在服务器端已正确命名和区分大小写。可能的问题...