一、SignalR使用心得
一、通讯模式
以往,我们聊天发消息模式(单体发送消息或通知)-好友(一对一)、群组(一对多),方便管理好友-分组方式。
那么聊天和好友管理参考qq,刷新分组标签也页面就会从新加载分组列表和分组内好友列表,
刷新群组标签页面就会从新加载群组列表,点击好友进行聊天从新数据库里面从新获取消息(包含已读和未读、历史记录、其实就是读取最新的消息-没有已读和未读之说)。
请求无状态,我们不知道有没有发送消息,我们就需要实时的监听有没有新消息,以往的ajax轮询,如今的signalr。
二、SignalR的实时模式
用户通过signalr连接服务器后将会是一种实时的连接,并且保存用户标识,那么我们就能实时提醒我们是否有新消息和监测用户是否发送消息。
具体为:
文字说明:1、前端在(指定位置)执行连接signalr会触发OnConnectedAsync (客户端连接函数,并保存ConnectionId客户端标识)。
代码说明:
- /// <summary>
- /// 客户端连接的时候调用
- /// </summary>
- /// <returns></returns>
- public override Task OnConnectedAsync()
- {
- var id = this.Context.ConnectionId;//客户标识
- Trace.WriteLine("客户端连接成功");
- return base.OnConnectedAsync();
- }//所有链接的客户端都会在这里
signalr有发送消息机制让我触发即知道我要发消息,即signalr封装调用前端的发消息的函数,直接以此为载体将数据发送到服务器上,即触发服务器内的消息函数。
设想1:
如果没有此机制(机制必须让服务器端知道某用户有消息),仅连接不知道用户做什么,将完全没有任何意义。
如果通知你有消息,还去数据库读取也将会多此一举即(用户发消息触发机制服务器仅知道有消息,无内容即代码可为消息机制函数内写ajax达到触发服务端有消息过来内容没传,内部ajax触发自己写的控制器方法存储消息到数据库),然后前端有一个signalr有消息通知机制可以抖动效果,你自己再去读取的这种形式,达到消息体和实时连接完全隔离,消息体的格式很多种、支持文字、图片、视频、gif、等等还要根据链接各个端支持的资源格式做处理(多个浏览器支持的资源格式例如苹果浏览器的视频资源和google视频资源),这里实时连接兼容问题-每个浏览器支持的实时连接已经工作量不小。
而signar发送消息触发机制是可以承载消息体资源的,这里官方可能没刻意提到的它的细节,毕竟浏览器都支持,我还支持不了你的消息资源格式吗,肯定不能呀。
设想2:ConnectionId去绑定用户昵称和头像反之。这里的ConnectionId是继承Hub类的,在此类都可以访问,
ConnectionId去绑定用户昵称和头像:
通过触发OnConnectedAsync,只要链接的第一时间从数据库获取,并绑定,同时因为ConnectionId一直服务端内的持久存在,绑定的关系,也要持久化在服务端用static或缓存。
用户昵称和头像去绑定ConnectionId:
通过自定义函数,链接后,主动触发,将用户名和头像传到hub内的自定义函数内,获取并绑定,雷同图下。
三、处理消息的方式
好友列表和消息列表2种情况
已知道:能获取所有客户端的链接(这个链接会非常大,多少亿人的链接,但是自己账户的人确实很少),
1、所以一个用户刚登陆的情况:
就要读取数据库该用户所有好友,将链接的所有客户端有该用户好友的全部点亮。
2、分组也是如上一样
3、消息的话情况
3、1 一方在线的情况下 通过客户端发送到我们的Signalr中转服务中,我们先存储数据库设置未读,在线则推送,否则取消
3、2 上线的情况 客户 但是 用户先读取用户列表点亮,然后才有消息之说,
判断是否有未读消息,有就从数据库读取消息并将消息状态更改已读。
,然后 根据用户是否在线,反推送消息读取成功的id——表示展示效果已读。 (需要消息知道是否被读的情况下,执行该操作)
3、消息记录也是,直接获取消息记录,(需要消息知道是否被读的情况下,执行该操作将消息读取状态也获取)
一、SignalR使用心得的更多相关文章
- [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门
一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到SignalR技术,所以打算总结下Asp.net ...
- SignalR技术
Asp.net SignalR快速入门 一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到Sign ...
- .net core 3.0 Signalr - 08 业务实现-客户端demo
由于signalr作为一个单独的推送系统,跟业务系统是分离开的,所以此处模拟一个业务系统,新建一个.net core app项目 ## 模拟实现一个登录功能 我们的登录很简单,当进入系统,如果检测到用 ...
- .net core 3.0 Signalr - 09 待改进&交流
## 个人心得 写博客真的比写代码累,膜拜那些坚持写博客的大佬! 有时候零散的片段比较多,没写之前感觉有千千万万要写的东西,实际写的时候发现, 好像这个没啥说的,然后就帖了个图,或者一笔带过了 ## ...
- SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- ABP文档 - SignalR 集成
文档目录 本节内容: 简介 安装 服务端 客户端 连接确立 内置功能 通知 在线客户端 帕斯卡 vs 骆峰式 你的SignalR代码 简介 使用Abp.Web.SignalR nuget包,使基于应用 ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
随机推荐
- vue注
1.vue-cli3创建运行项目: vue-cli3可视化创建项目: vue ui vue-cli3创建项目:vue create elementUI(elementUI为项目名称) vue-cli3 ...
- Android MQTT的发布与订阅
一.MQTT介绍 链接1(菜鸟教程):https://www.runoob.com/w3cnote/mqtt-intro.html 连接2(MQTT中文网):http://mqtt.p2hp.com/ ...
- 如果将get请求转换成post请求
td><a href="emp/${emp.id}">Edit</a></td> <form action="" ...
- input 输入框效验
input 输入框效验 1:只能输入正整数: <el-input v-model.number="formData.projectNum" type='number' min ...
- 五、SpringBoot—HelloWorld案例
弱弱的补充一下啊,,,上一讲如果个别同学创建完项目之后发现项目pom.xml文件或者项目其他地方报错,你可以安装下图操作: HelloWorld案例: 编写好之后启动项目(贼姬霸简单) 启动成功: 浏 ...
- Ubuntu - apt 下载源设置为阿里的源
# 备份 sources.list cp /etc/apt/sources.list /etc/apt/sources.list.bak # 切换为阿里的源 echo "deb http:/ ...
- centOS7 flask项目布署
先用1张图表示centOS布署flask的关键点,以及可能遇到的问题,及解决办法. 图片看不清,可以[下载]下来看,清晰度能够看清字 [目标] 局域网内,通过url可以访问flask编写的api 更新 ...
- ELK日志分析之安装
ELK日志分析之安装 1.介绍: NRT elasticsearch是一个近似实时的搜索平台,从索引文档到可搜索有些延迟,通常为1秒. 集群 集群就是一个或多个节点存储数据,其中一个节点为主节点,这个 ...
- LeetCode.868-二进制距离(Binary Gap)
这是悦乐书的第333次更新,第357篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第203题(顺位题号是868).给定正整数N,找到并返回N的二进制表示中两个连续1之间的最 ...
- 第四周Java实验总结&学习总结
实验二 Java简单类与对象 实验目的 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握用类作为类型声明变量和方法返回值: 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性 ...