@(java 技術筆記)

java mina框架的使用和一些自己的理解

1、什么是mina框架及為什么用mina?

官網的解釋為:

Apache Mina Server 是一個網絡通信應用框架,也就是說,它主要是對基於 TCP/IP、UDP/IP協議棧的通信框架(當然,也可以提供 JAVA 對象的序列化服務、虛擬機管道通信服務等),Mina 可以幫助我們快速開發高性能、高擴展性的網絡通信應用,Mina 提供了事件驅動、異步(Mina 的異步 IO 默認使用的是 JAVA NIO 作為底層支持)操作的編程模型。

我自己的理解:

java socket是阻塞的,所以我們要開發高效的網絡通信應用需要使用NIO, 但是NIO的使用操作起來比較復雜。所以mina可以簡單理解為基於Nio的網絡框架。

2、Mina的用法及一些自己的理解?

下面這個是mina 官網對於mina服務端框架的說明:

圖中可以分析出mina服務端框架,可以分為3層。 I/O Acceptor作為連接的接收器, IO Filter作為消息過濾器,I/O Handler作為消息的處理器。

結合這種理解,mina服務器的構建代碼就可以簡化為下面5步。其中MyServerHandler是自定義的類,繼承自mina的org.apache.mina.core.service.IoHandlerAdapter類。

還有一點就是,mina框架中,服務器和客戶端的連接狀態及交互是用IoSession對象進行的,mina會為每一個客戶端連接創建一個IoSession對象,然后把他保存到內存中。直到這個連接斷開。try {

// 第一步 構建socekt連接對象NioSocketAcceptor

NioSocketAcceptor acceptor=new NioSocketAcceptor();

// 第二步設置消息處理器,可以自定義

acceptor.setHandler(new MyServerHandler());

//第三步 設置消息過濾器,可以自定義

acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));

//第四步 設置連接對象 session的相關設置

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);

//第五步 綁定服務器端口,並啟動服務器

acceptor.bind(new InetSocketAddress(9898));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

自定義的消息處理器:

mina的消息處理器常用的幾個方法如下,方法的作用和方法名基本相同。 需要注意的就是,每個消息處理器的回調中都包含一個IoSession對象, 每一個客戶端連接對應一個IoSession對象。public class MyServerHandler extends IoHandlerAdapter {

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

System.out.println("exceptionCaught");

}

public void messageReceived(IoSession session, Object message)

throws Exception {

String s=(String)message;

System.out.println("messageReceived:"+s);

session.write("server reply:"+ s);

}

public void messageSent(IoSession session, Object message) throws Exception {

String s=(String)message;

System.out.println("messageSent:"+s);

}

public void sessionClosed(IoSession session) throws Exception {

System.out.println("sessionClosed");

}

public void sessionCreated(IoSession session) throws Exception {

System.out.println("sessionCreated");

System.out.println("session:"+session.toString());

}

public void sessionIdle(IoSession session, IdleStatus status)

throws Exception {

System.out.println("sessionIdle");

}

public void sessionOpened(IoSession session) throws Exception {

System.out.println("sessionOpened");

}

}

java mina框架教程_java mina框架的使用和一些自己的理解相关推荐

  1. java爬虫框架动态_java爬虫框架webmagic

    最近需要爬去网站的一些商品,就开始在网上找方法,本来是想着用Python做的,因为以前用Python写过一个小脚本,爬取一个文献网站上的免费文献. 步骤大概是这样的:1,先获取给定URL的html文件 ...

  2. java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx

    java程序设计基础教程第六章图形用户界面编辑.docx 还剩 27页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要 ...

  3. java面向对象的教程_java面向对象入门教程

    java面向对象入门教程 Java 编程语言的风格十分接近C.C++语言.Java是一个纯的面向对象的程序设计语言,以下是小编为大家搜索整理的java面向对象入门教程,希望能给大家带来帮助!更多精彩内 ...

  4. java基础自学教程_Java基础自学教程(全套)

    Java基础自学教程(全套)视频简介: Java是计算机领域中一种非常重要的程序设计语言,也是一款优秀的纯面向对象语言.第一视频教程分享的这部Java基础自学教程是一部非常不错的教程.它详细讲述了JA ...

  5. java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...

    资源名称:Java高级框架应用开发案例教程:struts2+spring+hibernate PDF 第1章 struts+spring+hibernate概述 1.1 框架概述 1.2 struts ...

  6. java netty 教程_Java NIO框架Netty教程(十六)

    该图是OneCoder通过阅读Netty源码,逐渐记录下来的.基本可以说明Netty服务的启动流程.这里在具体讲解一下. 首先说明,我们这次顺利的流程是基于NioSocketServer的.也就是基于 ...

  7. java netty教程_Java NIO框架Netty教程(一) – Hello Netty

    先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解一下.我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序.具体能做什么,各位可以尽量发挥想象.技术,是 ...

  8. java nio框架netty教程_Java NIO框架Netty教程(一) – Hello Netty

    先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解一下.我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序.具体能做什么,各位可以尽量发挥想象.技术,是 ...

  9. java框架白话_Java NIO框架Netty教程(二) 白话概念

    "Hello World"的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什.方便自己以后更灵活的使用和扩展. 声明,笔者 ...

  10. java 建立ssh隧道_JAVA SSH框架搭建流程

    百度出来的,觉得思路很好: 搭建struts应用 2.1 引入需要的jar包 commons-fileupload-1.2.1.jar文件上传 commons-logging-1.0.4.jar日志包 ...

最新文章

  1. 零基础入门学习Python(19)-内嵌函数和闭包
  2. java 18 -4 LinkedHashMap集合
  3. WinForm加载外部类库项目的集成开发模式
  4. how is my appointment opened in HCP
  5. 算法题解:连续子数组的最大和及其下标
  6. sphinx python_如何使用Sphinx记录Python代码
  7. 今晚直播丨分布式数据库:从PG-XL到TBASE
  8. centos镜像 from_下载 CentOS 7 镜像文件
  9. 计算机主板的概念,华硕新型概念主机大爆料:内置未来主板
  10. php7 php5 区别,php7与php5的区别有哪些?
  11. (转)以案说法 | ICO,刑事风险要远离!
  12. 安卓rom制作教程_刹那 刷机教程20-1三星S10N10等系列韩版国行安卓9升级10详细步骤...
  13. 网站apm测试软件,apm测试(手速apm在线测试)
  14. CSRF跨站请求伪造漏洞修复方案
  15. doc创建php文件,PHP读取创建txt,doc,xls,pdf类型文件
  16. 用GZIPOutputStream流压缩出现H4sIAAAAAAAAAA==
  17. 顶级赛事!2021 CCF大数据与计算智能大赛重磅开赛!
  18. 三电平半桥LLC谐振变换器电路仿真 采用频率控制方式 引入一定的移相角度
  19. 用php编写多项选择题_php试题
  20. 神经网络的图像识别技术,神经网络图像角度分析

热门文章

  1. 学习笔记(01):Linux操作系统入门培训_Linux/Unix基础培训教程视频课程-01.Linux入门培训之_软硬件平台介绍...
  2. Selenium + C# 实现模拟百度贴吧签到 2
  3. Log4J漏洞补丁(ArcGIS Enterprise适用)
  4. 在线客服html前端代码QQ微信联系
  5. IM即时通讯实现原理
  6. linux中ftp禁止匿名,linux下禁止root和匿名用户登录ftp
  7. QQ聊天 代码 输入表情
  8. 冰点还原精灵如何安装
  9. 【电脑故障】打印机驱动程序无法使用且print spooler错误1068
  10. Hive实战—时间滑动窗口计算