1.开发环境:
- 开发工具:Visual Studio 2019
- 数据库:SQL Server2012
- 开发环境:.Net Core 3.1
2.使用技术:
- Signalr:实现消息推送
- SqlDependency:经过它的OnChangeEventHandler事件去监听数据库的波动【只针对SQL Serer】
- Microsoft.EntityFrameworkCore:链接数据库
3.业务逻辑(虽然最后没作成,可是这技术我还学会了)
开发场景:
客户须要每个参加展会的人,签到时候,须要在展会的大屏幕实时显示签到人的信息。
html
思考:
若是让之前的我作,一想到就是作AJAX异步请求数据,设置循环间隔时间。可是这样会有问题,第一若是时间设置太长,没法实现实时,若是时间设置过短,会发送不少无效的请求大量占用资源,这个时间就没法去定义。
数据库
思路:
此时,我在想,若是要是【有人盯着】数据库,当数据有变化的时候,【有人通知】能通知咱们,这样岂不是完美了,敢想就敢干,Just Doing!
浏览器
4.使用的技术讲解
有人盯着:
经过在百度海洋的搜索,了解到了SqlDependency能够实现这个效果,链接数据库以后,编写查询语句【有注意点,后面讲】,而后使用SqlCommand初始化链接对象和执行的语句,在将SqlDependency初始化填入SqlCommand对象,而后给SqlDependency添加事件,而后执行SqlCommand命令。当数据库的某张表数据变更,就会触发SqlDependency添加的事件。缓存
有人通知:
Signalr能够实现推送消息,应用程序启动以后,浏览器和服务器会创建一个链接(Signalr不懂能够百度看看原理),当服务器有什么须要推送的,能够推送指定的人、组,以及全部人。服务器
5.效果展现
6.注意事项
- 编写的SQL:查询语句中不能使用 *,表名要加[dbo].[xx]
- 在你的数据库中须要开启BROKER:
ALTER DATABASE [你须要监听的数据库的表名称] SET NEW_BROKER WITH ROLLBACK IMMEDIATE; ALTER DATABASE [你须要监听的数据库的表名称] SET ENABLE_BROKER;
在数据库执行命上面两个命令。并发
- 建立GlobalHubServer服务,用户获取实例对象(当咱们监听到数据库变更的时候,咱们须要通知,能够经过GlobalHubServer和咱们的ChatHub实现依赖注入,这样容器给我建立了一个实例,咱们只须要注入就好了)。
- Signalr中自定义的方法,注意格式驼峰命令法
- SqlDependency须要提起开启
7.参考文档
- 利用SignalR实现实时推送信息功能
他是使用ASP.NET MVC开发的,全部他有些东西,我在ASP.NET Core是用不了【GlobalHost】,这个是用来获取实例对象,我采用是GlobalHubServer代替 - 启用数据库的 Service Broker
- GlobalHubServer由来
- Get started with ASP.NET Core SignalR
8.不足的地方
这个只是测试代码,若是在实际状况中,不知道会不会出问题,打算使用Redis作缓存,处理并发的请求,后面有时间写个API,进行接口压力测试一下效果,若是有好的方案,欢迎来探讨!异步
9.结尾
为何没贴代码了,你看看我给的几个文档就能够作出来,动手实践才是硬道理,若是有功能实现不了的,能够给我留言!工具