提问人:osswmi 提问时间:6/3/2021 更新时间:6/4/2021 访问量:1225
仅通过 Asp.Net 核 WebSocket 单向发送消息
Sending Messages One-Way Only Through a Asp.Net Core WebSocket
问:
我正在开发一个 C# Asp.NET Core 应用程序,其中客户端将通过 JavaScript WebSocket 连接到服务器,服务器本身将是唯一可以向连接的客户端发送消息的东西。
客户端不会将消息发送回服务器,如果它们设法通过在任何浏览器控制台中手动向服务器发送消息,服务器将忽略它们。
这是我用来向所有连接的客户端发送消息的 C# 代码示例:
foreach(WebSocket webSocket in WebsocketHandler.WebSocketClients.Values)
{
await webSocket.SendAsync(...);
}
由于我不希望客户端将消息发送回服务器(因为这应该是单向消息流),因此后续调用:
await webSocket.ReceiveAsync(...);
在调用“SendAysnc()”之后立即需要吗?在调用“SendAsync()”之后不调用“ReceiveAsync()”的缺点/后果是什么?
我在 MS 的文档中找不到任何内容说在调用“SendAsync()”后需要调用“ReceiveAsync”(尽管大多数在线示例都这样做),并且两种方法(根据 MS 文档)都声明“此操作不会阻止”。
我在这里主要关心的是,是否连续只发送消息而不接收任何消息,是否会导致许多“SendAsync()”调用堆积的内存泄漏,因为它需要一些“响应”,或者服务器断开客户端连接,因为没有消息从通信通道的另一端发送回来,并且服务器认为客户端已丢弃。
问候。
答:
1赞
davidfowl
6/4/2021
#1
需要调用 ReceiveAsync,以便检测 websocket 何时关闭,以便完成关闭握手。通常,当直接使用 websocket 时,您将有 2 个并行运行的异步循环,即接收循环和发送循环(或者您可以像现在一样交接套接字进行发送)。还需要确保执行 websocket 升级的请求保持运行,以便连接不会关闭,并且在你的方案中,你可以将接收循环用于此目的。
评论