Javascript 在单个页面中管理多个信号器连接
有时失败,有时失败 这是设置 我有一个订单列表,每个订单都有一个唯一的信号连接。目前单页上有230个订单。建立信号器连接的目的是让用户可以看到每个订单的任何实时更新(查看、编辑等)。我决定为每个订单建立单独的连接,这样我就不必管理当前正在查看、编辑的订单等。到目前为止,对于已成功连接的订单,更新是正确和顺利的 另一个用户查看订单的示例(正在显示该用户的照片) 这是我连接到信号器集线器的代码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
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);
}
}
所以我的问题是
使用信号器的分组机制,不要为您的用例创建多个连接强> 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);
}
}