Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在单个页面中管理多个信号器连接_Javascript_C#_Asp.net_Asp.net Web Api_Signalr - Fatal编程技术网

Javascript 在单个页面中管理多个信号器连接

Javascript 在单个页面中管理多个信号器连接,javascript,c#,asp.net,asp.net-web-api,signalr,Javascript,C#,Asp.net,Asp.net Web Api,Signalr,有时失败,有时失败 这是设置 我有一个订单列表,每个订单都有一个唯一的信号连接。目前单页上有230个订单。建立信号器连接的目的是让用户可以看到每个订单的任何实时更新(查看、编辑等)。我决定为每个订单建立单独的连接,这样我就不必管理当前正在查看、编辑的订单等。到目前为止,对于已成功连接的订单,更新是正确和顺利的 另一个用户查看订单的示例(正在显示该用户的照片) 这是我连接到信号器集线器的代码 crimeassure.factory('hubProxy', ['$rootScope', functi

有时失败,有时失败

这是设置

我有一个订单列表,每个订单都有一个唯一的信号连接。目前单页上有230个订单。建立信号器连接的目的是让用户可以看到每个订单的任何实时更新(查看、编辑等)。我决定为每个订单建立单独的连接,这样我就不必管理当前正在查看、编辑的订单等。到目前为止,对于已成功连接的订单,更新是正确和顺利的

另一个用户查看订单的示例(正在显示该用户的照片)

这是我连接到信号器集线器的代码

crimeassure.factory('hubProxy', ['$rootScope', function ($rootScope) {

  function hubProxyFactory(hubName) {

      var _hubConnection = $.hubConnection();
      _hubConnection.logging = true;
      var _hubProxy = _hubConnection.createHubProxy(hubName);

      return {
          on: function (eventName, callback, failCallback) {
              _hubProxy.on(eventName, function (result) {
                  $rootScope.$apply(function () {
                      if (callback) {
                          callback(result);
                      }
                  });                     
              })
          },
          invoke: function (methodName, data) {
              _hubProxy.invoke(methodName, data)
              .done(function (result) {
                  //$rootScope.$apply(function () {
                  //    if (callback) {
                  //        callback(result);
                  //    }
                  //});
              });
          },
          start: function (successCallback, failCallback) {                  
              _hubConnection.start({ transport: 'webSockets' }).done(successCallback).fail(failCallback);
          },              
          hubConnection: _hubConnection,

      };
  };

  return hubProxyFactory; 
}]))

这是我的集线器课程

public class ResearcherExpressQueueHub : Hub
{

    public void UpdateComponentActivity(ComponentItem item)
    {
        Clients.Group(item.ComponentId.ToString()).updateComponentActivity(item);
    }

    public void ComponentModalOpen(ComponentItem item)
    {
        item.Activity = ComponentActivity.ComponentModalOpen;
        Clients.Group(item.ComponentId.ToString()).updateComponentActivity(item);
    }

    public void ComponentModalClose(ComponentItem item)
    {
        item.Activity = ComponentActivity.ComponentModalClose;
        Clients.Group(item.ComponentId.ToString()).updateComponentActivity(item);
    }

    public Task JoinGroup(string componentId)
    {
        return Groups.Add(Context.ConnectionId, componentId);
    }

    public Task LeaveGroup(string componentId)
    {
        return Groups.Remove(Context.ConnectionId, componentId);
    }
}
所以我的问题是

  • 为什么我遇到断开连接的情况“在建立连接之前WebSocket已关闭”

  • 我的方法是实现这类需求的最佳方法吗


  • 使用信号器的分组机制,不要为您的用例创建多个连接

    IIS和浏览器都有限制。某些浏览器限制4或5个并行连接。您可以通过打开多个不同的浏览器来测试它

    有关分组的详细信息:


    在signalr中与团队合作非常简单。您可以在此处找到详细信息:

    显示您连接方式的代码在哪里?事实上,这里没有足够的信息来重现这个问题。。我刚刚编辑了这个问题并上传了一个截图,所有代码都应该在问题本身中。屏幕截图也是不鼓励的谢谢你的建议,我已经很久没有使用stackoverflow了:D我现在已经更新了这个问题..我已经在使用订单id分组了。你是建议我使用单一连接吗?然后分组。。。订单id还是按用户?@AjGrandeza:对我来说,您的用例在每个细节上都不清楚。请您详细说明您想向客户发送哪些信息。我们可以简短地聊天。。。。会是easier@AjGrandeza:从我的观点来看,我会像下面这样创建它。在页面初始加载的情况下,客户端生成getAllOrders并订阅事件(OrderAdded、OrderEdited、OrderRemoved)。在EventHandler中,您可以根据事件更新订单列表。不需要分组。但如果您理解我的要求,我就不是舒尔。但我在分组方面有另一个问题。。。我用订单id对它们进行了分组,因此该订单上的任何更新都将只反映在该订单上。。。现在我有了一个连接,这个连接现在有多个对不同组的订阅(因为有很多订单)。。现在这就是设置,每个订单都从其他订单获得更新…您在1分钟内对ob订单进行了多少更改?我建议你不需要分组。。。
    public class ResearcherExpressQueueHub : Hub
    {
    
        public void UpdateComponentActivity(ComponentItem item)
        {
            Clients.Group(item.ComponentId.ToString()).updateComponentActivity(item);
        }
    
        public void ComponentModalOpen(ComponentItem item)
        {
            item.Activity = ComponentActivity.ComponentModalOpen;
            Clients.Group(item.ComponentId.ToString()).updateComponentActivity(item);
        }
    
        public void ComponentModalClose(ComponentItem item)
        {
            item.Activity = ComponentActivity.ComponentModalClose;
            Clients.Group(item.ComponentId.ToString()).updateComponentActivity(item);
        }
    
        public Task JoinGroup(string componentId)
        {
            return Groups.Add(Context.ConnectionId, componentId);
        }
    
        public Task LeaveGroup(string componentId)
        {
            return Groups.Remove(Context.ConnectionId, componentId);
        }
    }