Azure 中的 websocket 限制故障排除,活动连接
Posted
技术标签:
【中文标题】Azure 中的 websocket 限制故障排除,活动连接【英文标题】:Troubleshooting the websocket limit in Azure, active connections 【发布时间】:2017-12-05 19:59:48 【问题描述】:我正在对使用 websocket 的应用服务进行故障排除。 它在允许 350 个 websocket 的服务计划 Basic 上运行。 这是该计划中唯一使用 websockets 的应用程序。
问题是大约 20 小时后,我收到 503 条回复,说我达到了 websocket 限制。
现在的设置有 3 个客户端连接到服务。
在我的应用程序中调查 websocket 泄漏的过程中,我想跟踪正在使用的 websocket 数量。
我的应用程序或 Azure 门户中是否有任何地方可以查看活动 websocket 连接的数量?
跟进:
我已将 websocket 连接记录为Amor suggested。 我的应用程序的 HTTP 部分仍在工作,我可以从应用程序获取动态结果,该应用程序现在报告哪些 websocket 连接处于活动状态以及自启动以来已创建了多少。
重启应用服务并配置一个客户端无限重连接后。
在“总的 websocket 连接数”达到 350 之前运行良好。此时我关闭了客户端。
限制应该是 350 个并发连接,但自开始以来总共看起来是 350 个。 这些连接中的大多数(至少 340 个)是由单个客户端发起的,该客户端在开始新的连接之前处理每个连接,一旦达到限制,它就会被关闭。
有人建议我从基本升级到标准,因为标准没有人为限制。我能看到这项工作的唯一原因是基本计划的 websocket 限制存在错误。
更新 2
与此同时,我一直在与 Microsoft 开发人员支持联系,他们注意到 似乎 套接字卡在 IIS 中,而没有卡在 Kestrel 中。原因仍在调查中。
支持人员可以向我显示一段时间内的连接使用图表,清楚地显示如何达到限制。
我会及时更新这个问题,以防我的代码出现错误。
【问题讨论】:
【参考方案1】:我建议您定义一个变量来计算连接数。如果打开了 Web 套接字连接,只需增加连接数即可。如果 Web 套接字连接已关闭,请减少连接数。以下代码供您参考。
计算 ASP.NET SignalR 的连接数。
public class MyHub : Hub
private int _connectionCount = 0;
public override Task OnConnected()
_connectionCount++;
return base.OnConnected();
public override Task OnReconnected()
_connectionCount++;
return base.OnReconnected();
public override Task OnDisconnected(bool stopCalled)
_connectionCount--;
return base.OnDisconnected(stopCalled);
统计传统 ASP.NET 中的连接数。
public class WSChatController : ApiController
private int _connectionCount = 0;
public HttpResponseMessage Get()
if (HttpContext.Current.IsWebSocketRequest)
HttpContext.Current.AcceptWebSocketRequest(ProcessWSChat);
return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);
private async Task ProcessWSChat(AspNetWebSocketContext context)
WebSocket socket = context.WebSocket;
while (true)
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
WebSocketReceiveResult result = await socket.ReceiveAsync(
buffer, CancellationToken.None);
if (socket.State == WebSocketState.Open)
_connectionCount++;
//Process the request
else
_connectionCount--;
break;
【讨论】:
我添加了第二个计数器,它只会为每个新的 websocket 增加。结果看起来像是限制了总共 350 个(非并发)websocket 连接。 请检查您是否正确关闭了连接。以下链接供您参考。 How to gracefully close a two-way WebSocket in .Net 嘿,如果我在一个基本托管计划上有多个应用程序服务,它们是否都共享 350 连接限制?以上是关于Azure 中的 websocket 限制故障排除,活动连接的主要内容,如果未能解决你的问题,请参考以下文章