提问者:小点点

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


我正在尝试从头开始创建一个新的应用程序。我使用了SignalR和WebAPI。我相信我知道很多不同之处,但是SignalR不是因为使用了WebSockets而更快吗?WebAPI对于能够重用外部框架来说是有意义的。SignalR对于我不一定要在外部使用的任何东西都有意义。我做了一些调查,我找不到任何地方它说你不应该。我意识到这有点基于观点,但为什么你要把这两种观点结合起来,而不是仅仅使用信号呢?

我想我主要问的是,使用SignalR发送回呼叫者是否是错误的,除非我将发送到该信道上的其他客户端?对我来说,当您只是发送回客户端时,可以像使用WebAPI一样使用SignalR。这样做不对吗?它用于客户端调用的代码更少(2行vs 6行或更多,这取决于我用它做什么)。我的想法是,我现在可能试图操纵数据并将其发送给调用者,但也许我想稍后将其发送给所有客户端,或者向所有客户端发送通知。我不喜欢在webApi控制器中使用signalR调用。只是感觉信号呼叫应该在集线器中。谢谢你的帮助。


共2个答案

匿名用户

您没有理由不将它们一起使用,因为它们针对的是两个不同的问题。WEB-API是一种使web服务易于被许多不同类型的应用程序/设备瞄准的方法,而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应用程序上运行。

匿名用户

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

从浏览器,HTTP客户端,工具,语言等使用RESTfull services(HTTP)比使用WebSockets更容易。谷歌Chrome支持监控WebSockets流量,但很差,而微软Edge不支持。

许多工具,如Google Analytics和Microsoft Azure Application Insights,都可以监控HTTP请求中的错误,但无法对WebSockets进行监控。您需要手动实现监视。实际上,WebSockets流量是从客户端到服务器的简单消息,反之亦然,没有附加信息。SignalR为此提供了一些包装器--某种错误消息格式。

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

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

如果您需要双向通信,您可以使用SignalR进行服务器到客户机的推送通知,使用WebApi进行客户机到服务器的请求,以简化开发,扩展,调试和使用其他源的API。但是您也可以使用SignalR,只有当您不介意它的缺点或流量开销对您来说很大的时候。