Lee*_*ong 5 c# asp.net asp.net-core asp.net-core-signalr
从这里开始,它指出
所有客户端都将使用相同的 URL 与您的服务建立 SignalR 连接(“/signalr”或您的自定义 URL,如果您指定了一个),并且该连接用于服务定义的所有集线器。
与在单个类中定义所有集线器功能相比,多个集线器没有性能差异。
我想这样做的原因只是因为我唯一的集线器正在成为神级,但是,我找不到在 .NET Core 中做多个集线器的方法(同时共享一个连接)。我希望我能这样做,然后我就可以像在 Web API 中那样管理我的代码。
一种可能的解决方案可能会创建多个连接,但我必须在我的客户端管理不同的连接,只是为了防止服务器代码上的上帝类。
从这里开始,有人指出将方法映射到外部类是一种解决方法。这是唯一的解决方法吗?
由于 SignalR 已集成到 ASP.NET Core 中,因此不再可能对多个集线器使用一个连接:
在 ASP.NET Core SignalR 中,连接模型已得到简化。连接直接与单个集线器建立,而不是使用单个连接来共享对多个集线器的访问。
作为上帝类的解决方法,#region如果您想使用单个集线器,则可以使用's 来构造代码。
但是,我确实建议针对每种目的使用不同的集线器。例如:如果我有一个聊天系统,我会使用特定的中心 ( ChatHub) 进行聊天。如果我也有一个测验系统,我会使用QuizHub,等等......
我真的没有看到处理多个连接的问题。因为不会出现性能问题。通过为每个目的分离代码,您可以实现关注点分离(如果我错了,请纠正我)。
如果可以,请仅在实际使用客户端代码(连接)的页面上初始化客户端代码(连接),方法是将 SignalR 客户端代码(每个集线器)划分到其自己的文件中。
让我们看最后一个例子:如果测验有自己的页面,则仅加载该页面上的 SignalR 客户端代码。
您可以尝试的另一件事是 AJAX 请求。有时,我将代码分离到不同的 API 控制器中,然后简单地向 API 控制器发出 AJAX 请求,以处理数据库事务等。
您还可以通过使用该控制器内的一些IHubContext<T>SignalR 功能。
在 ASP.NET Core SignalR 中,您可以通过依赖项注入访问 IHubContext 的实例。您可以将 IHubContext 实例注入控制器、中间件或其他 DI 服务。使用该实例向客户端发送消息。
class SomeController : Controller
{
private readonly IHubContext<MyHub> _hubContext;
public SomeController(IHubContext<MyHub> hubContext)
{
_hubContext = hubContext;
}
}
Run Code Online (Sandbox Code Playgroud)
在集线器之外使用 SignalR 函数的文档有更多示例。
缺点是您无法使用 SignalR 的所有优秀功能,例如向组添加连接。可以在您的控制器内使用。
| 归档时间: |
|
| 查看次数: |
4216 次 |
| 最近记录: |