0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# asp.net core web实时应用技术SignalR (1/2)

问题:web应用服务器如何主动推送消息给客户端/浏览器?

我们在开发类似股票、期货这类基于行情的策略交易系统时,都是需要实时接收最新的交易所数据,根据最新的行情数据处理,如果一旦出现我们关注的信息,肯定希望尽量快的推送给用户。


传统解决方法

方法1 polling

通过客户端不断发请求给服务器,服务器接收到请求后,进行处理响应并回复结果。这种轮询,比如js定时器发送http请求,然后获得应答。

优点

request/response请求响应方式,简单。

缺点

客户端一多,服务器会有很多的无效处理,浪费服务器资源,而且实时性也并不好,依赖于客户端轮询的频率。


方法2 long polling

客户端也是定期发送给服务器,但是服务器并不是立即响应,而是等到有需要的处理结果才会发送给客户端,如果没有,则服务器会对该会话等待一段时间,只要该时间内,出现需要的数据结果就会立即通知客户端。

优点

相比方法1,可以看到这种方式无需不停的发起请求占用服务器资源,并且在一次请求,服务器等待处理未超时之前,一旦有满足数据结果,可以做到实时发送给客户端。比方法1节省了很多资源。

缺点

但是依然需要轮询,只是轮询的频率下降了些。


现在的解决方法

WebSocket

WebSocket,采用与底层Socket编写程序的方式,使得可以开发出双向的实时通信应用。但是开发复杂度较高,如同Socket一样,只提供了数据通信功能,并没有针对应用层提供RPC调用机制。数据通信还需要涉及到将数据解析成对象,将对象序列成数据,同时还要对不同数据进行不同方法逻辑的调用,


Asp net core中SignalR

SignalR可以看作是一种RPC框架,但是其支持实时调用,即其底层可以使用WebSocket作为通信方式,而且,其也支持polling和long polling,因为signalR也提供了自动检测当前浏览器支持哪一种方式。有了这个SignalR的提供的功能,可以很方便的实现客户端和浏览器端的实时调用关系。比如开发一个实时的聊天系统。

SingalR技术使得Web服务端可以创建多个不同Url的SignalR Hub,从而实现不同目的的实时应用功能,并且提供了基于.Net平台的SignalR桌面端nuget包。

#yyds干货盘点# asp.net core web实时应用技术SignalR (1/2)_web实时应用


举报

相关推荐

0 条评论