一、通讯模式

以往,我们聊天发消息模式(单体发送消息或通知)-好友(一对一)、群组(一对多),方便管理好友-分组方式。

那么聊天和好友管理参考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使用心得的更多相关文章

  1. [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门

    一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到SignalR技术,所以打算总结下Asp.net ...

  2. SignalR技术

    Asp.net SignalR快速入门 一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到Sign ...

  3. .net core 3.0 Signalr - 08 业务实现-客户端demo

    由于signalr作为一个单独的推送系统,跟业务系统是分离开的,所以此处模拟一个业务系统,新建一个.net core app项目 ## 模拟实现一个登录功能 我们的登录很简单,当进入系统,如果检测到用 ...

  4. .net core 3.0 Signalr - 09 待改进&交流

    ## 个人心得 写博客真的比写代码累,膜拜那些坚持写博客的大佬! 有时候零散的片段比较多,没写之前感觉有千千万万要写的东西,实际写的时候发现, 好像这个没啥说的,然后就帖了个图,或者一笔带过了 ## ...

  5. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  6. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  8. ABP文档 - SignalR 集成

    文档目录 本节内容: 简介 安装 服务端 客户端 连接确立 内置功能 通知 在线客户端 帕斯卡 vs 骆峰式 你的SignalR代码 简介 使用Abp.Web.SignalR nuget包,使基于应用 ...

  9. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

随机推荐

  1. hive里面union all的用法记录

    UNION用于联合多个select语句的结果集,合并为一个独立的结果集,结果集去重. UNION ALL也是用于联合多个select语句的结果集.但是不能消除重复行.现在hive只支持UNION AL ...

  2. Mac OS 10安装CocoaPods流程

    一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPod ...

  3. 郝斌_GUI

    85事件处理 import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java ...

  4. Apache hadoop namenode ha和yarn ha ---HDFS高可用性

    HDFS高可用性Hadoop HDFS 的两大问题:NameNode单点:虽然有StandbyNameNode,但是冷备方案,达不到高可用--阶段性的合并edits和fsimage,以缩短集群启动的时 ...

  5. Django 多数据库联用(同一个APP的models里不同class用不同数据库)

    很多网站有多数据库联用的文章,如自强学堂http://code.ziqiangxuetang.com/django/django-multi-database.html 大都只讲解如何让不同的app对 ...

  6. Django-DRF组件学习-其他学习

    1.认证Authentication 可以在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_ ...

  7. vim加脚本注释和文本加密

    vim /etc/vimrc 一.李导版本 autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" fun ...

  8. tensorflow学习之搭建最简单的神经网络

    这几天在B站看莫烦的视频,学习一波,给出视频地址:https://www.bilibili.com/video/av16001891/?p=22 先放出代码 #####搭建神经网络测试 def add ...

  9. Mongodb-安全配置优化

    1.MongoDB配置文件样例 # mongod.conf, Percona Server for MongoDB # for documentation of all options, see: # ...

  10. JGit、SvnKit - 版本提交日志(1)提取

    1.相关开源jar包  1>使用JGIT访问git项目  2>使用SVNkit访问svn Git官方JGit使用教程指导 2.Git历史提交日志导出到文件 在项目根目录执行如下命令,将日志 ...