SignalR和WebAPI,为什么要使用这两者的组合?

Tay*_*ell 5 c# asp.net signalr asp.net-web-api

我正在尝试从头开始创建一个新的应用程序.我使用过SignalR和WebAPI.我相信我知道很多差异,但是因为它使用websockets而不是SignalR更快?WebAPI对我来说是有意义的外部框架能够重用.对于我不一定要在外部使用的任何东西,SignalR对我有意义.我已经做了一些研究,但我找不到它说你不应该找到的任何地方.我意识到这是基于意见的,但为什么你会使用两者的混合而不仅仅是SignalR?

我想我最常问的是,如果使用SignalR发回给调用者是不对的,除非我会发送给该频道的其他客户端?对我来说,当您只是发送回客户端时,可以像使用WebAPI一样使用SignalR.做错了吗?客户端调用的代码较少(2行对6或更多,具体取决于我正在使用它).我的想法是我可能正在尝试操纵数据并将其发送给调用者,但也许我想稍后将其发送给所有客户端或向所有客户端发送通知.我不喜欢在我的webApi控制器中使用signalR调用.只是感觉signalR调用应该在Hub中.谢谢你的帮助.

Ted*_*Ted 8

没有理由不将它们一起使用,因为它们针对两个不同的问题.Web-API是一种使Web服务易于被许多不同类型的应用程序/设备定位SignalR的方法,同时以服务器可以调用客户端上的一段代码的方式提供双向通信,而客户端不必继续轮询服务器以获得结果.

例如,客户端不断向服务器询问有关SignalR的任何新消息(如facebook通知),服务器知道有特定客户端的新通知,并且可以直接发送它们而客户端不必要求它们.

http://www.asp.net/web-api

ASP.NET Web API是一个框架,可以轻松构建可覆盖广泛客户端的HTTP服务,包括浏览器和移动设备.ASP.NET Web API是在.NET Framework上构建RESTful应用程序的理想平台.

http://www.asp.net/signalr

ASP.NET SignalR是ASP.NET开发人员的新库,可以轻松开发实时Web功能.SignalR允许服务器和客户端之间的双向通信.服务器现在可以在连接的客户端可用时立即将其推送到连接的客 SignalR支持Web套接字,并且可以回退到旧版浏览器的其他兼容技术.SignalR包括用于连接管理的API(例如,连接和断开事件),分组连接和授权.

一个潜在的问题是,虽然SignalR擅长JavaScript在客户端上定位代码,但Web-Api可以实现与各种平台和设备的连接.因此,用于SignalR定位Web浏览器的相同技术不一定适用于原生Android应用程序.


Vas*_*huk 5

您可以根据应用程序需求一起使用它们。我建议您看一下HTTP和WebSockets协议之间的区别。WebApi使用HTTP(S),SignalR主要使用WebSocket,在某些情况下则使用其他传输。它们都有优点和缺点。使用SignalR的主要好处是如上所述的双向双向通信和较低的通信开销。浏览器通常会为每个请求在HTTP标头和cookie中发送一些KB数据。

通过浏览器,HTTP客户端,工具,语言等使用RESTfull服务(HTTP)比使用WebSockets更容易。Google Chrome支持监视WebSockets流量,但是效果很差,而Microsoft Edge则不支持。

许多工具,例如Google Analytics(分析)和Microsoft Azure Application Insights,都可以监视HTTP请求中的错误,但不能对WebSocket执行此操作。您需要手动实施监视。实际上,WebSockets通信是从客户端到服务器的简单消息,反之亦然,没有其他信息。SignalR为此提供了一些包装器-某种错误消息格式。

WebSockets还因为保持开放的TCP连接而使用了更多的服务器资源,并且很难扩展使用WebSockets的Web应用程序。例如,如果您有100K在线用户,则意味着您必须能够保持100K TCP连接。对于HTTP –不必要。对于某些非常简单的场景,您可以用某种客户端轮询来代替SignalR,但是要小心,这种方法可能会带来很多问题。

因此,如果您不需要双向通信和流量开销(通常每个请求几个KB)不是什么大问题,则仅使用WebApi。

如果您需要双向通信,则可以将SignalR用于服务器到客户端的推送通知,将WebApi用于客户端到服务器的请求,只是为了简化开发,扩展,调试和使用其他来源的API。但是,只有在您可以接受SignalR的缺点或流量开销很大时,您也可以使用SignalR。