也使用 ClientWebSocket 的 SignalR Hub 架构

问题描述

我们希望 SignalR Hub (Microsoft.AspNetCore.SignalR.Hub) 成为某种中间人;除了向/从客户端推送和接收消息之外,它还应该使用来自单独的网络套接字服务器的消息使用 ClientWebSocket。它处理这些消息,然后通过 SignalR 将派生的消息发送给客户端。

一个问题是ClientWebSocket被注入然后在构造函数中配置,但是构造函数调用了多次,在ClientWebSocket已经打开的情况下尝试配置会抛出错误

一个问题是,当调用 ClientWebSocket.ConnectAsync 时,SignalR 不再接收消息。

有没有办法让这些在 Hub 中工作?或者我们是否必须以不同的方式设计它才能不在同一个类中使用 SignalR 和 ClientWebSocket?

解决方法

SignalR 是一种基于任何传输的协议。这意味着您可以使用 ClientWebSocket 进行连接,但您需要手动编写和解析协议消息。该协议记录在 https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/HubProtocol.md