0

我在 C# 客户端上使用“CloseOutputAsync”来启动与 Node.js 服务器的关闭握手。

我的 Node.js 服务器收到一个“关闭”事件并立即将他的“websocket.readyState”设置为“关闭”,而无需通过“关闭”。

当我的 C# 客户端发送关闭握手时,他将状态设置为“CloseSent”。

问题是我的 C# 保持在这种状态,而我的 Node.js 服务器认为 websocket 连接已关闭。

如何检测服务器上的连接是“CLOSING”,我可以使用 ws 库的什么功能向 C# 客户端发送确认以确保他的状态从“CloseSent”变为“Closed”?

我正在使用 Node.js 下的标准“ws”库和 C# 下的标准“System.Net.WebSockets”。

4

1 回答 1

0

我终于找到了解决方案。

当 C# 客户端启动关闭时,他应该使用“CloseAsync”而不是“CloseOutputAsync”发送关闭。node.js 服务器立即将 websocket 状态设置为“Closed”,而不经过“Closing”状态(从未找到触发此“Closing”状态的方法),但随后 C# 客户端将其状态设置为“Closed”。

如果 node.js 服务器正在启动关闭,则 C# 客户端应使用“CloseOutputAsync”。C# 客户端状态从 Open -> CloseReceived -> CloseSent -> Closed 开始。

于 2021-01-22T17:39:46.797 回答