即时通讯之 SignalR 介绍
- .Net
- 2020-07-16
- 17热度
- 0评论
SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换;它将继续,直到明确关闭。 对话通过永久连接进行,允许客户端向服务器发送多个消息,并允许服务器做出相应答复,值得注意的是,还允许服务器向客户端发送异步消息。是一个完全基于客户及服务器端解决方案,它是以JS作为客户端和ASP.NET作为服务端来创建这类的应用。
传统HTTP采用的是大家熟知的“拉模式”,即客户端发出的每次请求,服务端都是被动处理。此场景下客户端是老大,很显然只有一方主动,操作与处理起来就没那么完美。为了能让服务端也能主动,html5的出现让这种变得可能,大家知道html5中有两种主动模式。第一种叫做websockect,WebSockets是Html5提供的新的API,可以在Web网页与服务器端间建立Socket连接,它是基于tcp模式的双工通讯。还有一种叫做SSE,也就是客户端来订阅服务器的一种事件模型。在html5出来之前,如果要做到服务器主动,我们只能采用变相的longpool和iframe流勉强实现。这就相当于要实现服务端的主动就有了4种方案。SignalR的出现是我们每位开发者的福音。它对上面四种方案进行了高度的封装,也就是说signalR会在这四种技术中根据浏览器和服务器设置采取最优的一种模式。

对于.NET开发者的福音,.NET平台为我们提供了一种简洁高效智能的实时信息交互技术->SignalR,它集成了上述数种技术,并能根据配置自动或手动选择其最佳应用。
总之,SignalR是一个运行在.NET 平台上的 html websocket 框架,它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面。可用于即时消息、聊天等。

SignalR 和 WebSocket的区别:
简单的说呢,websocket对客户端和服务端都有要求,而SignalR兼容性比较好,它集成了WebScoket和http两种方式,当条件满足时,自动使用WebScoket,否则使用http。可以简单的理解为,WebScoket是SignalR的子集。
SignalR 传输选择过程:
1、如果浏览器是 Internet Explorer 8 或更早版本,则使用长轮询。
2、如果配置了 JSONP (即jsonp参数设置为true启动连接时),使用长轮询。
3、如果进行跨域连接(即,如果 SignalR 终结点与托管页不在同一域中),则如果满足以下条件,将使用 WebSocket:
a、客户端支持 CORS (跨域资源共享)。
b、客户端支持 WebSocket
c、服务器支持 WebSocket
d、如果未满足上述条件,将使用长轮询。
4、如果未配置 JSONP 并且连接不跨域,如果客户端和服务器都支持它,则将使用 WebSocket。
5、如果客户端或服务器不支持 WebSocket,则使用服务器发送事件(如果可用)。
6、如果服务器发送事件不可用,则尝试"永久帧"。
7、如果"永久帧"失败,则使用长轮询。

鲁ICP备19063141号
鲁公网安备 37010302000824号