浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图

session一般出现在计算机领域,IM软件中的session,老的IM有两层:首先是逻辑层的session来管理会话的参与者,消息列表,会话类型等等;还有协议层的session,主要是代表客户端跟服务器的一个事物通道。

老的IM软件

客户端跟Server交互的每一类操作都是基于会话。比如客户端登录,需要建立一个登录的会话;客户端发消息,需要建立一个会话。下面举例:

客户端向Server发了一条消息,这条消息的发送就建立在会话之上。客户端需要下面几个步骤。

1. 创建一个session ID=1,

2. 发第一条消息的sequence id=1,第二条消息sessionID仍是1,但是sequence ID=2以此类推,同一个联系人建立的sessionID不变,sequenceID跟着消息的数量递增。

3. 消息发送完成后,关闭session。

客户端发送完消息,需要Server的回执,所以sessionID+sequenceID组成唯一的标识,可以找到发送的这条消息,更新UI的显示。

上面的场景就是所谓的【会话内】消息,主要是发给在线联系人,Server做了特殊处理,这样的消息可以很快速的到达对方。有了会话内,就有【会话外】:会话外指的是:不需要建立会话,直接发送给对,Server会存储下来等到对方下次上线再发送。

很明显,会话外的逻辑要比回话外的简单得多!

现状

现代的IM软件应该都是所谓的会话外了,没有协议层的session的概念了,只有逻辑层的session。

现代的协议更聪明了,每一个消息都有一个messageID,这样的话。会话的概念就不存在了,客户端-服务器之间只有一个socket网络层面的会话了。

附一张IM软件的层次图

protocol.a是一个简写,其实是一个核心的库,负责协议层的解析和管理。

浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图

时间: 2024-10-25 20:46:44

浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图的相关文章

浅谈IM软件业务知识——非对称加密,银行U盾的原理

概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字.算法基于一个数论:将两个大素数相乘非常容易,但要对这个乘积的结果进行 因式分解却非常困难,因此可以把乘积公开作为公钥,该算法能够抵抗目前已知的所有密码攻击.RSA算法是一种非对称算法,算法需要一对密钥,使用其中一个 加密,需要使用另外一个才能解密.我们在进行RSA加密通讯时,就把公钥放在客户端,私钥留在服务器. RSA非对称加密算法,可以验

IM软件业务知识—导航

概述 导航的概念,大家不陌生.最常见的就是地图导航,可以引导用户怎么到达目的地.另外还有一些"导航",比如hao123网站,这类是上网用的. IM软件设计中也有导航这一模块,模块作用跟上面两类相似,但是有一些不一样.IM软件中的导航主要是为了"存放Server接入地址:避免写死url,从而采用动态的配置".IM软件在使用中必然使用到一个http地址,那么这些地址一般是从导航中获取的,而不是写死的. 导航是一组XML,下面展示一下某IM软件的导航 获取机制 ● 首次登

浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥

概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很easy,但要对这个乘积的结果进行 因式分解却很困难,因此可以把乘积公开作为公钥.该算法可以抵抗眼下已知的全部password攻击. RSA算法是一种非对称算法,算法须要一对密钥.使用当中一个 加密.须要使用另外一个才干解密.我们在进行RSA加密通讯时.就把公钥放在client,私钥留在server.

浅谈如何做业务项目通用性、扩展性设计

前言 总结下如何设计项目方案.本文从通用.扩展两个角度去考虑项目该怎么设计,有哪些常用的手段.水平有限,望大家留言指正. 必要前提 充分的业务分析 充分了解业务细节:需求分析或者prd阶段,要充分掌握需求的细节.细节可能会决定:数据从哪获取(多处数据源如何统一接入),如何流转(流程插拔),存储选型(那种存储方便扩展:比如nosql存储异构数据). 考虑不同业务线的差异:业务线的差异可能会导致:数据源不同.指标口径不同.规则差异. 未来3-5年的规划 给未来留扩展空间:这个主要考虑业务的发展趋势,

浅谈JavaWEB入门必备知识之Servlet入门案例详解

工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详述一下什么是servlet... 个人观点:说白了,servlet就是一个java应用程序.一个运行在服务器上java类,servlet就是java处理web请求的一种机制,它具有独立于平台和协议的特性,可以生成动态的Web页面.再形象点,就是你通过IE等浏览器发送一个http请求后会根据你请求的内

浅谈IM软件怎样建立安全socket连接、登录

----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------------------------------------------------使用状态机来保持在线状态 [点击]                      拼图算法,将零碎小图,整理到一张大图上[点击]登录导航 [点击]                                          

?浅谈Asp.net的sessionState

浅谈Asp.net的sessionState Three Session State providers : InProcSessionStateStore, which stores session state in memory in the ASP.NET worker process OutOfProcSessionStateStore, which stores session state in memory in an external state server process Sq

整体二分浅谈

整体二分浅谈 一.前置知识 在学习整体二分之前,要学会二分,以及二分的分治思想. 二.整体二分浅谈及例题 例题:bzoj2527: [Poi2011]Meteors 对于这道题是整体二分的经典例题,我们先抛开整体二分,思考二分怎么做.对于一个询问,因为答案有单调性,如果$x$时刻为最小可以时刻,则比$x$小的时刻都不可以,比$x$大的时刻都可以,所以我们可以进行二分答案,并加以验证.先不说怎样验证,就单是时间复杂度就不能接受,$O(nmlog_2^n)$. 如果一个一个进行二分时间复杂度不允许,

浅谈软件工程师的代码素养

WeTest 导读 写这篇文章时内心是比较忐忑的,因为文章的话题范围非常大,怕自己驾驭不了.在实际工作中,维护过很多类型的代码,其中不乏高级工程师完成的逻辑,大家的需求能力都很不错,能够快速满足产品的需要,但很少能有人能注意到代码的整洁度,甚至很多代码经过多人维护后已经变得无法再进行任何一处的修改,最后不得不花大量的时间进行重构.因此我决定还是写一篇文章来"浅谈"软件工程师应具备的代码素养,希望能够对大家有所帮助,水平所限,如有不当之处还请不吝指正~ "程序是写给人读的,只是