仅通过 Asp.Net 核心 WebSocket 单向发送消息

Sending Messages One-Way Only Through a Asp.Net Core WebSocket

我正在开发 C# Asp.NET 核心应用程序,客户端将通过 JavaScript WebSocket 连接到服务器,服务器本身将是唯一可以向连接的客户端发送消息的东西.

客户端不会将消息发送回服务器,如果他们设法通过在任何浏览器控制台中手动发送消息到服务器,服务器将忽略它们。

这是我用来向所有连接的客户端发送消息的 C# 代码示例:

foreach(WebSocket webSocket in WebsocketHandler.WebSocketClients.Values)
{
    await webSocket.SendAsync(...);
}

因为我不希望客户端将消息发送回服务器(因为这应该是一种单向消息流),所以后续调用:

await webSocket.ReceiveAsync(...);

在调用“SendAysnc()”之后立即需要吗?他们 downsides/consequences 是否在调用“SendAsync()”后不调用“ReceiveAsync()”?

我在 MS 的文档中找不到任何说明在调用“SendAsync()”后需要调用“ReceiveAsync”的内容(尽管大多数在线示例都这样做)并且这两种方法(根据 MS 文档)都说明“这个操作不会阻塞。”

我主要关心的是连续只发送消息而不接收任何回复是否会导致内存泄漏,因为许多“SendAsync()”调用堆积如山,因为它期望一些“响应”返回或服务器断开客户端连接,因为没有消息从通信通道的另一端发回并且服务器认为客户端已断开连接。

此致。

您需要调用 ReceiveAsync 以便检测 websocket 何时关闭,从而完成关闭握手。通常,当直接使用 websockets 时,您将有 2 个并行的异步循环 运行,即接收循环和发送循环(或者您可以像现在一样交出套接字进行发送)。您还需要确保执行 websocket 升级的请求保持 运行 以便连接不会关闭,在您的场景中,您可以为此目的使用接收循环​​。