Mina---系统学习
1、为何使用Mina?
java提供的BIO、NIO使用的复杂性等原因,导致Mina框架的诞生;
2、什么时候使用Mina?
易于使用
高并发的用户量
被证明的系统:
Mina已被全球数以万计的应用使用;
现有协议的支持:
HTTP、TCP、UDP。。。
3、Mina的特性
4、Mina应用架构
5、Mina架构实现细节
基于Mina的应用分为3个层次:
1.1 I/O Service(I/O服务) ----具体的I/O操作
1.2 I/O Filter Chain(I/O 过滤器链) -----将字节过滤/转换为想要的数据结构,反之亦然
1.3 I/O Handler(I/O 处理器) -----实现实际的业务逻辑
6、创建基于Mina的应用的步骤
1.1 创建一个I/O Service ---从已存在的service中挑选一个或创建自己的
1.2 创建一个Filter Chain ---从现有Filter中挑选或创建一个自定义Filter
1.3 创建一个I/O Handler ---处理不同消息时编写具体业务逻辑
7、Mina---服务端架构
1.1 服务器端监听一个端口以获得连入请求,将其进行处理后然后发送回复;
服务器端还会为每个客户端创建并维护一个Session;
I/O Acceptor :监听网络以获取连入的连接或包
对于每一个新的连接,一个新的session会被创建,之后所有来自该IP地址/端口组合的请求会在同一个session中处理
在一个session中接收到的所有包,将穿越上图中所示的Filter Chain;
只要一个客户端连接到了Mina服务器端,需要创建一个新的session存放持久化数据;
Filter Chain用于修正包的内容(转化为对象、添加、删除信息等);
对于从原始字节到高层对象的相互转换,PacketEncoder/Decoder相当有用;
包或转化后的对象最终交由IOHandler;
IOHandler用于实现具体业务需求;
8、Mina---客户端架构
1.1 客户端需要连接一个服务器端,发送消息并处理响应;
客户端首先创建一个IOConnector,开启一个服务器的绑定;
在连接创建时,一个Session会被创建并关联到该连接;
应用或客户端写入Session,导致数据在穿越Filter Chain后被发送到服务器端;
所有接收自服务器端的响应穿越Filter Chain后由IOHandler接收并处理;
Mina---系统学习的更多相关文章
- Dubbo -- 系统学习 笔记 -- 配置参考手册
Dubbo -- 系统学习 笔记 -- 目录 配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> ...
- Dubbo -- 系统学习 笔记 -- 依赖
Dubbo -- 系统学习 笔记 -- 目录 依赖 必需依赖 缺省依赖 可选依赖 依赖 必需依赖 JDK1.5+ 理论上Dubbo可以只依赖JDK,不依赖于任何三方库运行,只需配置使用JDK相关实现策 ...
- 零基础如何系统学习Java Web
零基础如何系统学习Java Web? 我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...
- MES系统学习
MES系统是当今制造型企业信息化的热点,而统一建模语言UML是面向对象建模的标准语言,在软件工程发挥着重要作用.MES系统如何进行UML建模呢,今天和大家重点讨论一下MES系统的UML建模方法,请看本 ...
- 001 今天开始系统学习C#
2016-01-16 之前只是大概了解过c#语言,感觉掌握不牢靠.现在开始系统学习C#.现以该博客作为学习笔记,方便后续查看.C# 目标:系统掌握c#知识 时间:30天 范围:C#基础,Winform ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
- 从mina中学习超时程序编写
从mina中学习超时程序编写 在很多情况下,程序需要使用计时器定,在指定的时间内检查连接过期.例如,要实现一个mqtt服务,为了保证QOS,在服务端发送消息后,需要等待客户端的ack,确保客户端接收到 ...
- Hibernate的系统 学习
Hibernate的系统 学习 一.Hibernate的介绍 1.什么是Hibernate? 首先,hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBat ...
- css系统学习网站
最近系统学习一下css样式,找到一个不错的网站.http://css.doyoe.com/
随机推荐
- 三、Redis的配置文件和多数据库用途
1.使用文件 # 使用配置文件启动 redis-server ./redis.conf # 带配置文件启动 且指定某几个配置 配置名称前加 -- redis-server ./redis.conf - ...
- css实现下拉框导航条
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- JavaSE---多线程---线程的创建、启动
1.概述 1.1 Java中使用Thread类表示线程: 所有的线程对象必须是Thread类 或 其子类的实例: 每条线程的作用:完成一定的任务: Java中使用run方法来封装线程执行体 ...
- Spring讲解(三)
依赖注入Bean属性,使用xml配置 1.构造方法注入 案例代码演示 public class User { private String username; private String passw ...
- 常见算法和数据结构存在的坑(updating)
数组: c++数组下标都+5会稳. 50005000的别开60006000. 二分: 实数二分可能因为神马精度问题出现了不满足二分序的情况,要小心. 注意二分完后,不能直接用当前数组里存的值,要pd( ...
- java html生成PDF,并打印
import java.io.File; import java.io.FileOutputStream; import org.zefer.pd4ml.PD4Constants; import or ...
- Mysql忘记密码:关于ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)的问题
命令行登录mysql时,出现ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)的提示. ...
- nginx添加一个server
nginx添加一个server server { listen 80; server_name dev.pccb.com; index index.html index.htm; # rewrite ...
- webpack+vue+koa+mongoDB,从零开始搭建一个网站
github 地址 https://github.com/wangxiaoxi... webpakc+vue的搭建1.新建项目文件夹(see-films);2.npm init //初始化项目3.搭建 ...
- java并发编程笔记(二)——并发工具
java并发编程笔记(二)--并发工具 工具: Postman:http请求模拟工具 Apache Bench(AB):Apache附带的工具,测试网站性能 JMeter:Apache组织开发的压力测 ...