- 手机:
- 18888889999
- 电话:
- 0898-66889888
- 邮箱:
- admin@youweb.com
- 地址:
- 广东省广州市
于网络编程这个领域里,直接去处理繁杂的底层通信方面的细节,这事儿既麻烦又极易出现差错,然而应用框架的得以出现,恰恰是为了将开发者从这些重复性的劳动当中给解放出来 。
核心价值与设计思想
MINA2框架的关键作用就体现在抽象方面了,它把底层实现的TCP/IP或者UDP/IP协议通信的具体细节加以整合包装,进而给那些开发者供给了一种表现直观不复杂具有较高级别的API,而这也就表示着程序编写人员并不需要直接去应对套接字开展的建立、连接进行的管理以及依照执行计划和要求或实际情况进行的调度安排了。
这种设计思路致使业务逻辑跟网络传输完全分离 ,开发者仅需专注于确立所要处理的数据结构 ,撰写发送以及接收数据的业务代码 ,却无需去操心数据究竟是怎样经由网络一层又一层进行传输的 ,这明显提高了开发效率以及代码的可维护性 。
网络I/O模型对比
传统网络编程惯常运用反应式模型,像是 select 或者 epoll 。于这种模型情形下,应用程序于操作系统处登记感兴趣的 I/O 事件,接着予以等待通知。一旦事件出现,程序就得展开处理,往往要借助复杂的条件判断以及状态机去管理流程。
同其处于相对状态的是前摄式模型,此模型又被称作主动式模型。应用程序会主动去发起那种异步性质的I/O操作请求,而毫不顾虑设备是不是已经就绪。操作系统会接手操作的执行活动,程序凭借回调函数来获取相应结果。借由这样的方式,程序逻辑是经由一系列异步操作以及回调进行串联的,其结构变得更为清晰 。
接受器与连接器
于MINA2的体系架构里,I/O接受器担当着服务器的角色,它负责绑定至特定的网络端口,监听并接纳来自客户端的连接请求,一旦二者进行连接,接受器会为每个连接创建一个对话,并且管理后续的I/O事件分发。
用于实现客户端功能的是I/O连接器,它的任务是主动发起连接,向指定的服务器地址发起连接,连接建立后,连接器创建会话,用于后续与服务器的数据交换,这两个组件将网络连接的建立过程标准化和模块化。
会话与状态管理
“输入/输出会话”是“MINA2框架”里的一个“关键概念”,它“代表”着一次因通信而产生的“连接” 的 “生命周期”。每个具备该性质的所谓“会话”说到底就是一个“容器”,在这个被称为容器的空间里,开发者能够将任意与本次因通信被建立起的连接有所关联的用户数据容纳放置进去,其中涵盖但不限于像用户身份信息、当前交易状态或者协议解析的上下文这样的信息内容。
那些被存储于会话当中的属性,是具备全局可访问性的,可在过滤器链以及处理器之间去传递信息。这切实有效地解决了于网络通信进程里保持应用状态的问题,规避了运用全局变量或者复杂的外部映射关系。
过滤器链的作用
较为初始的网络通信所传输的是字节流,于此之时,业务层在操作处理的却是拥有结构构建的对象。MINA2之中的过滤器链担当起了这两者之间的转换桥梁的角色。举例来说,存在着负责把Java对象转化序列化成为字节的一个编码过滤器,然而,承担将接收到的字节逆还原成为对象任务,且也为一个解码过滤器 。
很多横切处理工作,像日志记录、性能统计、数据压缩或者加密等,都是由过滤器链来负责的。开发者能够如同拼接积木那样,把所需的过滤器依照顺序放进链之中,对整个通信管道统一予以添加功能,而无需对业务逻辑代码进行修改。
处理器的业务逻辑
经由过滤器链予以处理过后的I/O事件,最终会到达I/O处理器。处理器乃是开发者编写业务逻辑的关键地方。它规定了在实现连接确立、感知消息被接收到、发送消息完毕或者连接终止之际应当执行的具体行为 。
常有这种情况发生,开发者借助承继框架给付的基础适配器类达成个人的处理器,仅需将在意的事件回调方法予以重写。举例来说,于messageReceived方法里,针对解析完毕的业务对象开展处理,并且有可能借由会话对象朝着对端送去响应 。
你读完这篇文章之后,对于MINA2这类框架把网络通信复杂性予以抽象的设计理念持有怎样的看法呢?在实际的项目当中,你是更加倾向于去使用这种高级框架呢。还是选择从底层自行实现网络层呢?欢迎在评论区去分享你的经验以及观点。要是觉得有所收获的话,也请点赞给予支持。





