Popular blog tags

ASP.NET Core SignalR(1)-原理及使用介绍

Published

学ASP.NET Core SignalR需掌握三个方面的内同

1.服务端的写法

2.客户端的选择

3.选择客户端和服务端的通信方式

4.客户端和服务端数据的压缩方式

 

1.1 服务端的写法

 

2.1 ASP.NET Core SignalR客户端的选择

2.1.1 .Net Client

2.1.2 java Client

2.1.3 javascript Client

2.1.4 小程序客户端

websocket要求用wss,websocket只能走433端口

 

3. 客户端和服务端的通信方式

可选的客户端和服务端的通信方式包括LongLooping(长轮询)、WebSocket(HTML5的WEB套接字)、sse几种.可以在WEB客户端显式指定一种或几种,也可以采取默认(推荐),若采取默认,SignalR会根据浏览器的环境自动选择合适的传输方式。

3.2 WebSocket

浏览器和客户端之间想要进行WebSocket通信的话,从一开始的握手阶段,就要从HTTP协议升级为WebSocket协议,这是服务器根据WebSocket发送的请求包决定的。

小程序因为无法直接使用websocket,所以无法使用signalR.js,你可以试着把signalR.js中的webcosket使用部分换成wx.xxSocketxxx

微信小程序要改写signalr.js,把其中的代码改为iwx.socket代码。

nginx 要配置支持ws协议。

4.1 客户端和服务端数据的传输协议方式

客户端和服务端数据的传输数据时,需明确指定数据的格式,以便客户端和服务端能正确解析数据包的结构。有文本格式和二进制格式。

4.1.1 json

4.1.2 messagePack

 

一、SignalR 实现原理

SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现。在具体使用上,有两种不同目的的接口:

(一)PersistentConnection 。  

      PersistentConnection 是实现了长时间的 JavaScript 轮询(类似于 Comet)

(二)Hubs。    

  Hub 是用来解决实时信息交换问题,它是利用 Javascript 动态载入执行方法实现的。SignalR 将整个连接,信息交换过程封装得非常漂亮,客户端与服务器端全部使用 JSON 来交换数据。

二、实现流程

(一) PersistentConnection 接口的使用整个流程

(二)Hubs 接口的使用整个流程

1,在服务器端定义对应的 hub class;

2,在客户端定义 hub class 所对应的 proxy 类;

3,在客户端与服务器端建立连接(connection);

4,然后客户端就可以调用 proxy 对象的方法来调用服务器端的方法,也就是发送 request 给服务器端;

5,服务器端接收到 request 之后,可以针对某个/组客户端或所有客户端(广播)发送消息。

三、SignalR的客户端 SignalR支持三种客户端:

(一)JavaScript Client。

 一个简单的SignalR例子中的SignalRDemo(点赞页面)就是JavaScript Client(HTML中的JavaScript脚本)。 (二).NET Client。

 .NET Client包括但不限于Windows Console,Windows Form,WPF,Windows Phone等。

(三) Java client

引用包:

<script src="~/lib/signalr/signalr.js"></script>

https://docs.microsoft.com/en-us/aspnet/core/signalr/javascript-client?view=aspnetcore-3.0

四、资源收集

1.Real Time Translation Chat using SignalR https://github.com/vavjeeva/RealTimeTranslationChat.

blog

1.使用SignalR实现服务端消息推送,实时显示股票价格,对程序代码有详细解释

https://www.cnblogs.com/isrocking/p/Server-Broadcast-with-SignalR2.html

http://cache.baiducontent.com/c?m=9d78d513d9821afa04beca690c6697711925971337c0a11e68a5975fe3674f060738ece161645213d2b6617a44ea0c4bea873c706c4577f78cc8ff1b80e48f7871d57229731a804619d31faec14524c222955dec&p=8d71c54ad5c54add18aac7710f4ac1&newp=896e841aca904ead1cbd9b7d0b1d88231610db2151d6d7176b82c825d7331b001c3bbfb42326140fd1c77b6502a54e5be0fa3c793c0927a3dda5c91d9fb4c57479cc&user=baidu&fm=sc&query=SignalR+%B9%C9%C6%B1&qid=d85c5dfd0000d74b&p1=1

1.2 Web API++SignalR:ASP.NET Core: Building a Real-Time Online Poll System with SignalR 2, jQuery, EF Core, Core MVC and Web API 2

https://www.codeproject.com/Articles/1115941/ASP-NET-Core-Building-a-Real-Time-Online-Poll-Syst

1.3 Real-Time Poll Vote Results Using SignalR 2, MVC, Web API 2, jQuery And HighCharts

https://www.codeproject.com/Articles/1136917/Real-Time-Poll-Vote-Results-Using-SignalR-MVC-Web

1.4 Winfrom+SignalR:利用SignalR来同步更新Winfrom

2. .net core 3.x 

doc:https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction?view=aspnetcore-3.0

https://github.com/aspnet/AspNetCore/tree/master/src/SignalR/samples