前言
程序员的进步是需要环境的,良好的团队环境,良好的开发环境,会让人进步的更加快速。
所以,我认为,如果一个程序员,在2019年还在用Visual Studio 2005开发,那么,他,大概率,不会想了解Linq是个什么东西,因为他根本用不到。
就如同我,一直在纯Windows环境下开发,所以就对Core并不是很感兴趣。
因此,如果一直用Visual Studio 2013以下版本开发的话,估计他对SignalR也就没什么兴趣。
因为我们都有个坏习惯,用不到的就不喜欢去学习。
引用SignalR
闲话少叙,现在我们开始学习SignalR。
首先,创建一个MVC项目,然后,我们打开Nuget搜索SignalR,如下图:
成功引用后,我们查看引用,会发现程序引用了很多dll,比如Owin等等;这是因为SingalR的依赖项比较多,所以,我们也引用了比较多的DLL。
接着,我们会发现一个问题,我们添加引用是SignalR,但实际引用进来的却是SignalR.Core,如下图:
SignalR.Core和SignalR有什么区别呢?
我们上网查询一下,发现,他们的差异大致上就是下面这句话。
【ASP.NET Core SignalR 不支持自动重新连接。 如果客户端已断开连接,则用户必须显式启动新连接才能重新连接。 在 ASP.NET SignalR 中,如果连接断开,SignalR 会尝试重新连接到服务器。】
差异参考ASP.NET SignalR 和 ASP.NET Core SignalR 之间的差异
Startup
SignalR引入完成了,现在我们需要配置和使用它了。
如何配置呢?很简单。添加Startup文件,修改代码如下:
public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } }
Startup文件包含的功能很多,这里暂时不去详解了,我们暂时只要知道,Startup文件会在网站启动时跟着一起运行就可以了。
因为网站运行时会调用Startup的Configuration方法,所以,我们在这里打开SignalR的映射——app.MapSignalR(),即网站初始化,我们就开启了SignalR的映射。
Hub
SignalR简单的来说,是用于一个网页即时通讯的工具,既然是即时通讯,那么肯定就是双工——双向的。
现在我们先来看下,【网页——>服务器】这个方向的通讯。
网页向服务器发送信息
首先,我们在服务器建立一个Hub,用来接收网页的消息。
//这里命名尽量用小写,因为前台只认小写 [HubName("kibahub")] public class kibahub : Hub { // 这里函数命名虽然是大写,但前台Js调用要用小写字母开头 public void Send(string message) { var id = Context.ConnectionId; } }
代码很简单,我们建立了一个类,并集成Hub,然后编写了一个Send方法,供页面调用。
还可以看到,我们在类上面加了一个特性,用来显示的声明这个Hub在网页端的名称。
接下来,我们编写网页代码,在网页中,使用JavaScript来调用这个Hub的Send方法,代码如下:
@*优先signalR引用*@ @*这个是临时生成的文件,里面保存的是我们在服务器定义的hub生成的JavaScript代码*@