.net WebSocket:CloseOutputAsync vs CloseAsync
我们有一个有效的ASP.NET Web API REST服务,它使用HttpContext.AcceptWebSocketResponse(..)在我们的控制器方法之一上使用WebSockets。
代码看起来像这样的套接字处理程序……
public async Task SocketHandler(AspNetWebSocketContext context) { _webSocket = context.WebSocket; ... while(!cts.IsCancellationRequested) { WebSocketReceiveResult result = _webSocket.ReceiveAsync(inputSegment, cts.Token).Result; WebSocketState currentSocketState = _webSocket.State; if (result.MessageType == WebSocketMessageType.Close || currentSocketState == WebSocketState.CloseReceived) { // Should I use .CloseAysnc() or .CloseOutputAsync()? _webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "client requested", cts.Token).Wait(); } if (currentSocketState == WebSocketState.Open) { ... } } }
.CloseAsync()和CloseOutputAysnc()之间有什么区别? 我试过两个,他们似乎都很好,但必须有一些区别。 它们在MSDN上都有非常相似的描述……
System.Net.WebSockets.CloseAsync – 使用WebSocket协议规范第7节中定义的关闭握手将WebSocket连接关闭为异步操作。
System.Net.WebSockets.CloseOutputAsync – 启动或完成WebSocket协议规范第7节中定义的关闭握手。
https://www.salmanq.com/blog/5-things-you-probably-didnt-know-about-net-websockets/2013/04/
…优雅的方式是CloseAsync,它在启动时向连接方发送消息,并等待确认。 …另一种选择是使用CloseOutputAsync这更像是一种“即兴发射”的方法。 …
看起来你收到了结束信息;
if (result.MessageType == WebSocketMessageType.Close || currentSocketState == WebSocketState.CloseReceived)
所以我说你使用CloseOutputAsync
会很好,因为你已经收到一条消息“我想关闭这个连接”。
上述就是C#学习教程:.net WebSocket:CloseOutputAsync vs CloseAsync分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/991654.html