【问题标题】:What is the difference between using Kestrel Server or SignalR Server in ASP.NET Core?在 ASP.NET Core 中使用 Kestrel Server 或 SignalR Server 有什么区别?
【发布时间】:2020-09-21 04:14:10
【问题描述】:

据我了解,SignalR 允许您通过“服务器到客户端”和“客户端到服务器”通信来向 Web 应用程序添加实时功能。它运行在指定的端口上,可以用于通信。需要创建集线器,并带有要调用的功能。 Krestel 服务器是一种小型化的 IIS 服务器,它也在给定的端口上运行,客户端应用程序可以连接到该端口。

那么,我的问题是使用 SignalR 或 Krestel 服务器有什么区别,因为两者都在给定端口上运行并且客户端应用程序连接到该端口?

【问题讨论】:

  • Kestrel 是 web 服务器,SignalR 是运行在 Kestrel 之上的 websocket 实现。没有 Kestrel 就不能拥有 SignalR,但没有 SignalR 就可以拥有 Kestrel。

标签: asp.net-core signalr


【解决方案1】:

正如 Andy 所说,Signalr 是一种在 kestrel 上运行的服务。在我看来,它是一个类似于 MVC 或 web api 的 web 框架。

我们将像服务一样添加 Signalr 作为 MVC , Razor Pages 并添加如下路由:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddSignalR();
    }

端点:

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapHub<UserActivityHub>("/active");
        });

kestrel 是一个网络服务器,用于托管核心应用程序。它将侦听 HTTP 请求并将它们作为一组组合到 HttpContext 中的请求功能呈现给应用程序。 kestrel server的详细信息,可以参考article

【讨论】:

    【解决方案2】:

    请记住,所有框架的想法都是封装复杂性!

    Kestrel 是 Microsoft 在 ASP.NET Core 框架中实现的默认跨平台 Web 服务器实现,就像 Tomcat 是 Spring Framework for Java 的默认实现一样。

    更多信息here

    Kestrel 作为一个 Web 服务器,通过 http 处理从外部到应用程序的流量,对于 SignalR,它还通过 webSockets 处理双向流量,它还可以处理 http/2 等。

    请记住,WebSockets 是第 7 层上的不同协议,就像 http 或 https 一样,websockets 通过 ws 或 wss 这些也由像 Kestrel 这样的 Web 服务器管理。

    话虽如此,SignalR 只是一个库,是 ASP.NET Core 框架的一部分,用于处理 WebSocket 和其他类型的连接,使开发人员更容易构建应用程序,抽象出以下所有复杂性:

    1. Web 服务器(使用 Kestrel)
    2. WebSockets(使用 SignalR)

    更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多