本文共 1678 字,大约阅读时间需要 5 分钟。
(给DotNet加星标,提升.Net技能)
转自:喜欢吃鱼的青年 cnblogs.com/2828sea/p/13402532.html
一、开发环境
开发工具:Visual Studio 2019
数据库:SQL Server2012
开发环境:.Net Core 3.1
二、使用技术
Signalr:实现消息推送
SqlDependency:通过它的OnChangeEventHandler事件去监听数据库的波动【只针对SQL Serer】
Microsoft.EntityFrameworkCore:连接数据库
三、业务逻辑(虽然最后没做成,但是这技术我还学会了)
开发场景:客户需要每一个参加展会的人,签到时候,需要在展会的大屏幕实时显示签到人的信息。
思考:如果让以前的我做,一想到就是做AJAX异步请求数据,设置循环间隔时间。但是这样会有问题,第一如果时间设置太长,无法实现实时,如果时间设置太短,会发送很多无效的请求大量占用资源,这个时间就无法去定义。
思路:此时,我在想,如果要是【有人盯着】数据库,当数据有变化的时候,【有人通知】能通知我们,这样岂不是完美了,敢想就敢干,Just Doing!
四、使用的技术讲解
有人盯着:通过在百度海洋的搜索,了解到了SqlDependency可以实现这个效果,连接数据库之后,编写查询语句【有注意点,后面讲】,然后使用SqlCommand初始化连接对象和执行的语句,在将SqlDependency初始化填入SqlCommand对象,然后给SqlDependency添加事件,然后执行SqlCommand命令。当数据库的某张表数据变动,就会触发SqlDependency添加的事件。
有人通知:Signalr可以实现推送消息,应用程序启动之后,浏览器和服务器会建立一个连接(Signalr不懂可以百度看看原理),当服务器有什么需要推送的,可以推送指定的人、组,以及所有人。
五、效果展示
六、注意事项
编写的SQL:查询语句中不能使用 *,表名要加[dbo].[xx]
在你的数据库中需要开启BROKER:
ALTER WITH
在数据库执行命上面两个命令。
创建GlobalHubServer服务,用户获取实例对象(当我们监听到数据库变动的时候,我们需要通知,可以通过GlobalHubServer和我们的ChatHub实现依赖注入,这样容器给我创建了一个实例,我们只需要注入就行了)。
Signalr中自定义的方法,注意格式驼峰命令法
SqlDependency需要提起开启
七、参考文档
利用SignalR实现实时推送信息功能
启用数据库的 Service Broker
--is_broker_enabled为0未启用,为1启用 SELECT name,is_broker_enabled FROM sys.databases WHERE name = 'DBNAME' ALTER DATABASE DbName SET NEW_BROKER WITH ROLLBACK IMMEDIATE; ALTER DATABASE DbName SET ENABLE_BROKER;
GlobalHubServer由来
Get started with ASP.NET Core SignalR
八、不足的地方
这个只是测试代码,如果在实际情况中,不知道会不会出问题,打算使用Redis做缓存,处理并发的请求,后面有时间写个API,进行接口压力测试一下效果,如果有好的方案,欢迎来探讨!
九、结尾
为什么没贴代码了,你看看我给的几个文档就可以做出来,动手实践才是硬道理,如果有功能实现不了的,可以给我留言
- EOF -
推荐阅读 点击标题可跳转 人工智能 ?.NET Core一样胜任 .NET Core WebApi使用JWT验证签名 .NET Core自带分布式事务的微服务开源框架JMS看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
好文章,我在看❤️
转载地址:https://blog.csdn.net/weixin_39785600/article/details/111380101 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!