SignalR 和 WebAPI,为什么要结合使用两者?
SignalR and WebAPI, why use a combination of the two?
我正在尝试从头开始创建一个新应用程序。我使用过 SignalR 和 WebAPI。我相信我知道很多差异,但 SignalR 不是更快吗,因为它使用 websockets? WebAPI 对我来说很有意义,因为外部框架能够重用。对于我不一定要在外部使用的任何东西,SignalR 对我来说都很有意义。我做了一些研究,但我找不到任何地方说你不应该这样做。我意识到这有点基于意见,但为什么要混合使用两者而不只是 SignalR?
我想我主要想问的是使用 SignalR 发送回呼叫者是否错误,除非我会发送给该频道上的其他客户端?对我来说,当您只是发送回客户端时,SignalR 可以像 WebAPI 一样使用。这样做错了吗?客户端调用的代码更少(2 行与 6 行或更多行,具体取决于我在做什么)。我的想法是我现在可能正在尝试操纵数据并将其发送给调用者,但也许我想稍后将其发送给所有客户端或向所有客户端发送通知。我不喜欢在我的 webApi 控制器中使用 signalR 调用。感觉 signalR 调用应该在集线器中。感谢您的帮助。
没有理由不一起使用它们,因为它们针对的是两个不同的问题。 Web-API
是一种使 Web 服务易于被许多不同类型的 apps/devices 定位的方法,而 SignalR
以服务器可以调用一段代码的方式提供双向通信客户端无需不断轮询服务器以获取结果。
例如与其让客户端使用 SignalR 不断向服务器询问任何新消息(如 facebook 通知),服务器知道有特定客户端的新通知,并且它可以直接发送它们而无需客户端询问它们。
ASP.NET Web API is a framework that makes it easy to build HTTP
services that reach a broad range of clients, including browsers and
mobile devices. ASP.NET Web API is an ideal platform for building
RESTful applications on the .NET Framework.
ASP.NET SignalR is a new library for ASP.NET developers that makes
developing real-time web functionality easy. SignalR allows
bi-directional communication between server and client. Servers can
now push content to connected clients instantly as it becomes
available. SignalR supports Web Sockets, and falls back to other
compatible techniques for older browsers. SignalR includes APIs for
connection management (for instance, connect and disconnect events),
grouping connections, and authorization.
一个潜在的问题是,虽然 SignalR
非常擅长针对客户端上的 JavaScript
代码,但 Web-Api
支持与各种平台和设备的连接。因此,通过 SignalR
用于针对 Web 浏览器的相同技术不一定适用于本机 Android 应用程序。
您可以根据您的应用需求将它们一起使用。我建议你看看difference between HTTP and WebSockets protocols。 WebApi 使用 HTTP(S),SignalR 主要使用 WebSockets,在某些情况下使用其他传输。它们都有优点和缺点。使用 SignalR 的主要好处是如上所述的双工双向通信和低流量开销。浏览器通常在 HTTP headers 中为每个请求发送几 KB 数据和 cookie。
从浏览器、HTTP 客户端、工具、语言等使用 RESTfull 服务 (HTTP) 比使用 WebSockets 更容易。 Google Chrome 支持监控 WebSockets 流量,但效果很差,Microsoft Edge 不支持。
许多工具,如 Google Analytics 和 Microsoft Azure Application Insights 可以监控 HTTP 请求中的错误,但不能对 WebSockets 执行此操作。您需要手动实施监控。实际上 WebSockets 流量是从客户端到服务器的简单消息,反之亦然,没有附加信息。 SignalR 对此有一些包装器——某种错误消息格式。
由于保持开放的 TCP 连接,WebSockets 还使用更多的服务器资源,并且更难扩展使用 WebSockets 的 Web 应用程序。例如,如果您有 10 万个在线用户,则意味着您必须能够保持 10 万个 TCP 连接。对于 HTTP – 没有必要。对于一些非常简单的场景,你可以用某种客户端轮询来代替 SignalR,但要注意这种方法可能会带来很多问题。
因此,如果您不需要双向通信并且流量开销(通常每个请求几 KB)不是什么大问题,那么只使用 WebApi。
如果您需要双向通信,您可以将 SignalR 用于服务器到客户端的推送通知,将 WebApi 用于客户端到服务器的请求,以简化开发、扩展、调试和使用来自其他来源的 API。但是,只有当您可以接受它的缺点或流量开销对您来说很大时,您才可以使用 SignalR。
我正在尝试从头开始创建一个新应用程序。我使用过 SignalR 和 WebAPI。我相信我知道很多差异,但 SignalR 不是更快吗,因为它使用 websockets? WebAPI 对我来说很有意义,因为外部框架能够重用。对于我不一定要在外部使用的任何东西,SignalR 对我来说都很有意义。我做了一些研究,但我找不到任何地方说你不应该这样做。我意识到这有点基于意见,但为什么要混合使用两者而不只是 SignalR?
我想我主要想问的是使用 SignalR 发送回呼叫者是否错误,除非我会发送给该频道上的其他客户端?对我来说,当您只是发送回客户端时,SignalR 可以像 WebAPI 一样使用。这样做错了吗?客户端调用的代码更少(2 行与 6 行或更多行,具体取决于我在做什么)。我的想法是我现在可能正在尝试操纵数据并将其发送给调用者,但也许我想稍后将其发送给所有客户端或向所有客户端发送通知。我不喜欢在我的 webApi 控制器中使用 signalR 调用。感觉 signalR 调用应该在集线器中。感谢您的帮助。
没有理由不一起使用它们,因为它们针对的是两个不同的问题。 Web-API
是一种使 Web 服务易于被许多不同类型的 apps/devices 定位的方法,而 SignalR
以服务器可以调用一段代码的方式提供双向通信客户端无需不断轮询服务器以获取结果。
例如与其让客户端使用 SignalR 不断向服务器询问任何新消息(如 facebook 通知),服务器知道有特定客户端的新通知,并且它可以直接发送它们而无需客户端询问它们。
ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for building RESTful applications on the .NET Framework.
ASP.NET SignalR is a new library for ASP.NET developers that makes developing real-time web functionality easy. SignalR allows bi-directional communication between server and client. Servers can now push content to connected clients instantly as it becomes available. SignalR supports Web Sockets, and falls back to other compatible techniques for older browsers. SignalR includes APIs for connection management (for instance, connect and disconnect events), grouping connections, and authorization.
一个潜在的问题是,虽然 SignalR
非常擅长针对客户端上的 JavaScript
代码,但 Web-Api
支持与各种平台和设备的连接。因此,通过 SignalR
用于针对 Web 浏览器的相同技术不一定适用于本机 Android 应用程序。
您可以根据您的应用需求将它们一起使用。我建议你看看difference between HTTP and WebSockets protocols。 WebApi 使用 HTTP(S),SignalR 主要使用 WebSockets,在某些情况下使用其他传输。它们都有优点和缺点。使用 SignalR 的主要好处是如上所述的双工双向通信和低流量开销。浏览器通常在 HTTP headers 中为每个请求发送几 KB 数据和 cookie。
从浏览器、HTTP 客户端、工具、语言等使用 RESTfull 服务 (HTTP) 比使用 WebSockets 更容易。 Google Chrome 支持监控 WebSockets 流量,但效果很差,Microsoft Edge 不支持。
许多工具,如 Google Analytics 和 Microsoft Azure Application Insights 可以监控 HTTP 请求中的错误,但不能对 WebSockets 执行此操作。您需要手动实施监控。实际上 WebSockets 流量是从客户端到服务器的简单消息,反之亦然,没有附加信息。 SignalR 对此有一些包装器——某种错误消息格式。
由于保持开放的 TCP 连接,WebSockets 还使用更多的服务器资源,并且更难扩展使用 WebSockets 的 Web 应用程序。例如,如果您有 10 万个在线用户,则意味着您必须能够保持 10 万个 TCP 连接。对于 HTTP – 没有必要。对于一些非常简单的场景,你可以用某种客户端轮询来代替 SignalR,但要注意这种方法可能会带来很多问题。
因此,如果您不需要双向通信并且流量开销(通常每个请求几 KB)不是什么大问题,那么只使用 WebApi。
如果您需要双向通信,您可以将 SignalR 用于服务器到客户端的推送通知,将 WebApi 用于客户端到服务器的请求,以简化开发、扩展、调试和使用来自其他来源的 API。但是,只有当您可以接受它的缺点或流量开销对您来说很大时,您才可以使用 SignalR。