Csharp/C#教程:.net WebSocket:CloseOutputAsync vs CloseAsync分享


.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

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐