会话的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gohuge/article/details/79878494

会话-session

  会话是指一个终端用户与交互系统进行通讯的过程,这个过程是连续的,也可以时断时续的,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话;

一、会话的存在方式

  在程序设计上session的存在通常以一个独立的进程(Erlang),一个线程(Java)的方式存在。

  它通常会被以连接的业务为基础封装成一个业务模块或对象,处理对应连接的消息收发以及状态管理(其消息通常会被对应的协议模块处理,然后路由至业务模块);

  路由消息的对应业务模块在处理业务的时候,根据程序应用环境设计的不同,可能会在会话本进程/线程处理(不担心阻塞的情况),

  也可能会在路由时就新开辟进程处理(在Erlang上常常如此,毕竟对它来说开辟进程不算一回事儿),但分裂进程处理不代表会异步返回,在消息的流程控制上应该提供异步和同步接口。

二、会话缓冲

  我们可以会在编写会话模块时少不了给它定义创建时间、活跃时间、唯一标记、属性,等。

  用途可想而知,一个连接就是一个会话代表着一个用户,用户登录前后的状态,用户登录后的数据,用户进行业务输入时的业务处理,逻辑模块最便捷的方式就是从会话的属性中获取数据进行业务处理,

  然后再由存储管理器定期将会话中的数据发送至数据中心进行存储,在Java上数据和会话的关系只是一个引用,数据取走的函数也就只多了一个同步锁,但Erlang这个进程世界上可能不太一样,当然也可以存储在会话进程,

  但Erlang的Port在Linux进化中并不具备优势,当会话业务庞大到会阻塞消息收发的时候,当会话进程进行业务处理业务模块中有需求再访问会话进程数据造成等待死锁的时候,你就不能再采用会话存放了,

  另辟蹊径创建一个数据存储的伴随进程可能值得考虑,业务节点的存储管理器会根据自身节点在集群环中所处的位置进行间隔性数据存储。

  由于伴随进程的存在,它可以不和会话进行双向连接,它不必随着会话进程中止而自身销毁。它只负责缓存用户数据相对安全。

三、会话分布管理

  在集群中有网关层这个角色,会话通常都在这一层创建,当达到百万级别的会话时可能被均衡到多个网关节点,我们要对会话进行分类管理,比如游戏可能会以大区为单位管理会话;

  管理会话的目的主要是服务器进行消息派发的时候会进行选择,如果业务较多一个管理器是忙不过来的,所以管理就要仔细衡量其运行和应用环境了。

猜你喜欢

转载自blog.csdn.net/gohuge/article/details/79878494