mina - IoSession
介绍
会话是MINA的核心 :每次客户端连接到服务器时,都会在服务器上创建一个新会话,并将保留在内存中,直到客户端断开连接。
会话用于存储有关连接的持久性信息,以及客户端或服务器在请求处理期间以及最终在整个会话生命周期期间可能需要使用的任何类型的信息。
这也是您需要在会话上执行的任何操作的接入点:发送消息,关闭会话等…
至关重要的是要理解,由于NIO的不耐烦性质,从会话中阅读没有多大意义。实际上,当一些传入消息到达时,您的应用程序就会发出信号,这就是负责处理此类事件的 IoHandler。
换句话说,不要调用 session.read()。从不。
会话状态
会话具有一种状态,该状态将随时间演变。
- 已连接:会话已创建且可用
- 空闲:会话至少在一段时间内未处理任何请求(此时间段是可配置的)
- 空闲读取:实际上在一段时间内没有读取
- 空闲写入:在一段时间内实际上没有写入
- 两者均空闲:一段时间内不读取或写入
- 关闭:会话正在关闭(正在刷新其余消息,清理未终止)
- 已关闭 :会话现已关闭,无法执行任何其他操作来恢复它。这实际上不是一个真实的状态 :当会话关闭时,它会被删除。
- isActive(): 告诉会话是否有效(根据实现的不同,它可能意味着不同的东西)
- isClosing(): 告诉会话是否已经关闭
- isConnected(): 告诉会话是否处于活动状态(即,不在关闭模式下)
关闭会话
- 调用 closeNow() 方法(显式)
- 调用 closeOnFlush() 方法(显式)
- 客户端友好地关闭连接时
- 如果发生异常
请注意,如果远程对等方不再连接,则您使用 closeOnFlush() 调用关闭的会话将永远不会被销毁,除非您还处理了它的空闲状态,或者在系统 TCP 超时关闭套接字之前 - 这可能 需要几个小时-。 始终管理应用程序中的空闲状态。
远程客户端关闭
当远程客户端正确关闭会话时,会话将被关闭,所有未决消息将被丢弃。 这通常是它的工作方式。
但是,有时,远程客户端没有正确关闭连接(当电缆被粗暴地拔掉时,可能会发生这种情况)。 在这种情况下,会话永远不会收到有关断开连接的通知。 了解它的唯一方法是定期检查会话状态:如果空闲时间超过特定时间 - 必须进行配置 - 则应用程序可以决定关闭会话。 否则,会话最终将在达到 TCP 超时时关闭(可能需要数小时……)。
Exception
在某些情况下,将发生异常,导致会话关闭。通常,在创建会话时,我们可能会遇到问题,并且会话将立即关闭。另一种可能性是我们无法编写某些消息,例如,因为通道已关闭:然后关闭会话。
总而言之,每次我们在处理会话时遇到异常时,此会话都将关闭。
当然,您的应用程序将通过 ExceptionCaught 事件收到通知。
mina - IoSession相关推荐
- mina、netty消息边界问题(采用换行符)
在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息.理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次rea ...
- Camera开发系列之六-使用mina框架实现视频推流
章节 Camera开发系列之一-显示摄像头实时画面 Camera开发系列之二-相机预览数据回调 Camera开发系列之三-相机数据硬编码为h264 Camera开发系列之四-使用MediaMuxer封 ...
- mina处理断包和粘包
为什么80%的码农都做不了架构师?>>> 一. 解码方法 mina中有个内置类CumulativeProtocolDecoder是专门用来处理断包和粘包的.该类的api文档中 ...
- Apache Mina 介绍
为什么80%的码农都做不了架构师?>>> 1.MINA 框架简介 下图为本人根据对MINA的简要理解,所画出来的框架简图: Apache MINA 是一个网络应用框架,有助于用 ...
- MIna框架I/O Service层设计
Mina从2.0版本以后,它的设计让人感觉到非常的优雅.它对网络应用通信框架的3个层进行了更好的抽象,以及在功能逻辑上的划分,同时又保证了 作为一个网络应用通信框架的统一.划分的3个层分别为: I/O ...
- 基于MINA框架快速开发网络应用程序
1.MINA框架简介 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架.通过使用 ...
- java mina多线程_Java多线程基础总结九:Mina窥探(1)
一直以来的多线程的基础总结都是脱离应用的,但是要说多线程的应用就不能不说Mina.Apache Mina作为一个高性能的Java异步并发网 络通讯框架,其内部的多线程的设计和实现可谓是学习多线程的良药 ...
- java mina多线程_mina2中的线程池
一.Mina中的线程池模型 前面介绍了Mina总体的层次结构,那么在Mina里面是怎么使用Java NIO和进行线程调度的呢?这是提高IO处理性能的关键所在.Mina的线程调度原理主要如下图所示: A ...
- mina、netty消息边界问题
mina.netty消息边界问题(采用换行符) 在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息.理想状况是一方每发送一条消息,另一方就立 ...
最新文章
- bootstrap-fileupload-上传文件控件
- 基于 HTTP 协议的 3 种实时数据获取技术
- phpstduy8 redisClient 2.0 点不了_关于以太坊 2.0,你想知道的都在这里
- mysql创建用户unix,MySQL,无法创建UNIX套接字(12)
- 顶饰条行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- [翻译]LSP程序的分类
- python必背100源代码-100行Python代码实现自动抢火车票(附源码)
- python读音有道-python爬虫之有道在线翻译
- 元素周期表排列的规律_高中化高中化学元素周期表六大常考规律与特征学元素周期表六大常考规律与特征...
- 清华linux网络编程视频,清华大学视频课件:基于Linux的C++(自主模式)
- 火狐浏览器安装插件步骤
- Window操作系统安全配置
- 采购与供应链管理 读书笔记一
- java 折线图_用Java绘制简单的折线图
- 裸机服务器装系统步骤,组装裸机如何装系统?
- Win10强制更新关闭方法(博主亲测,不要再走弯路啦)
- 对ABAP程序调优的学习(一)select 改 read table
- vue开发规范(单文件组件)
- 【SCIR笔记】以文档为额外知识的生成式对话
- 【常见的优化算法介绍】