Mina框架及接口开发

2023-11-16

      Mina是NIO实现的一个架构,可以通过它快速开发网络通信,中间件等服务端程序。

IOService接口:描述服务端和客户端接口,子类是connector和Acceptor分别用于描述客户端和服务端。

IOproceser 多线程环境来处理我们的连接请求流程,ioFilter提供数据的过滤工作,包括编解码,日志等信息过滤。

Handler就是我们的业务对象,自定义Handler需实现IOHandlerAcceptor。

IOsession描述的是客户端和服务端连接的描述,常用于描述发送和接收数据。

总结:客户端流程 IOconnector->IOProcessor->IOFilter->Handler

           服务端流程 IOAcceptor->IOProcessor->IOFilter->Handler

server端:

package com.zjl.demo.mina;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;

import org.apache.mina.filter.codec.ProtocolCodecFilter;

import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

import org.apache.mina.transport.socket.SocketAcceptor;

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaServer {

  public void init( ) thows Exception {

         SocketAcceptor acceptor = new NioSocketAcceptor(Runtime.getRuntime( ).availableProcessors( ) +1);

       DefaultIofilterChainBuilder chain = acceptor.getFilterChain( );

       chain.addLast("codec",new ProtocolCodecFilter(

                     new TextLineCodecFactory( )));

     acceptor.setHandler(new MinaServerHandler( ) );

     acceptor.bind(new InetSocketAddress(8300));

     System.out.printIn("绑定端口8300");

}

    public MinaServer( ) throws Exception {

    init( );

}

    public static void main(String[ ] args) throws Exception {

            new MinaServer( );

           System.out.printIn(Mina服务器开启“);

   }

}

服务端消息处理类:

package com.zjl.demo.mina;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IdleStatus;

 import org.apache.mina.core.session.IoSession;

 public class MinaServerHanlder extens IoHandlerAdapter {

   @Override

 public void messageReceived(IoSession session, Object message)

    thows Exception {

         session.write("服务端发送消息”+message);

         session.write("quite");

}

   @Override

   public void exceptionCaught (IoSession session,Throwable cause)

               throws Exception {

        if(session.isConnected( ))  {

            session.close(true);

   }

}

   @Override

  public void exceptionCaught(IoSession session,Throwable cause)

    throws Exception {

  if(session.isConnected) {

     session.close(true);

    }

}

   @Override

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

       System.out.printIn("服务端收到消息“ + message.toString( ));

}

  @Override

 public void sessionClosed(IoSession session) throws Exception {

         super.sessionClosded(session);

         System.out.printIn("sessionCLosed");

}

   @Override

   public void sessionCreated(IoSession session) throws Exception {

            session.getConfig( ).setIdleTime(IdleStatus.BOTH_IDLE,30000);

}

    @Override

   public void sessionIdle(IoSession session, IdleStatus status)

            throws Exception {

           session.close(true);

}

  @Override

  public void sessionOpened(IoSession session) throws Exception {

     super.sessionOpened(session);

 }

}

       

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mina框架及接口开发 的相关文章

随机推荐

  • Java System.out.println()的简单理解

    前言 想必很多人对System out println 只是简单的进行运用 并未深入了解其背后的原理 例如当问及当中的out是什么 很多人可能一时答不上来 又比如问道println 方法属于那个类 你可能不假思索的答System类 可结果真
  • PostgreSQL(一)Windows安装

    目录 一 下载 二 安装PostgreSQL 三 安装StackBuilder 四 打开PostgreSQL管理工具pgAdmin 五 打开命令行 一 下载 下载地址 https www enterprisedb com downloads
  • openstack热迁移机制分析(libvirt热迁移模型、nova热迁移控制逻辑、调试方法)

    前段时间在解决大内存热迁移失败的时候 查阅了下openstack热迁移相关知识 有了一些记录跟大家分享下 以基于L版openstack qemu kvm 跟大家分享下API库libvirt的热迁移机制和nova控制逻辑的一些记录 注 这篇博
  • Jquery获取select选中的文本与值

    Jquery获取select选中的文本与值 jquery获取select选择的文本与值 获取select 获取select 选中的 text ddlregtype find option selected text 获取select选中的
  • Python3 unittest学习

    Python3 unittest学习 unittest单元测试框架 基本结构 执行测试 普通方式执行 通过unittest模块执行 跳过测试与预期失败 使用子测试区分测试迭代 类与函数 class unittest TestCase met
  • Linux内核中进程的初始化

    分析start kernel时应该会注意到Linux内核0号进程的初始化 见init main c set task stack end magic init task 其中 init task为第一个进程 0号进程 的进程描述符结构体变量
  • com.aspose.diagram.afr: Unexcepted eof.

    背景 SpringBoot项目 使用aspose diagram操作Visio 并且使用了模具文件 并将其放在了resource下面 代码 读取resource下面的文件 这种方法在linux环境上面依然可以使用 Resource reso
  • C#访问SQLite数据库,实现数据的增删改查功能

    说明 本文的代码是基于Winform中举例的 经过实测可用 1 封装Sqlite操作类 sqLiteHelper using System using System Collections Generic using System Linq
  • Arduino调节反馈式比例线性组件

    当您需要了解执行器的确切位置时 就需要光学反馈系列 它功能强大 可靠的执行器带有内置的光学传感器 可在您需要时提供反馈 光反馈没有内置控制器 但确实提供了单相脉冲作为位置反馈信号 可以将其输入到诸如Arduino之类的外部控制器中 多个线性
  • Selenium成长之路-24 frame(iframe)的处理

    今天来了解一下 frame的标签 frame标签有三种 frameset iframe frame gt gt gt frameset就当做一个普通的标签使用 gt gt gt 而frame与iframe就有点特殊了 所以接下来的时间 我们
  • 肖磊:不了解人类货币史,就别拿数字货币乱吹牛

    在知乎上 有一个并不起眼的问题 有人问 如果世界上只有一种货币 且总量一定 这个世界会发生什么 其中一个回答是这样的 假如一个村子只给他一亿流通币 且只准以这种流通币交易 会发生什么情况呢 首先你会感觉物价便宜了 因为在社会物资增加 而货币
  • c语言 char / short / int中能存储多大的数据?

    我们都知道char能存储的数据范围是 128 127 unsigned chard 范围是0 255 short能存储的数据范围是 32768 32767 unsigned short 范围是0 65535 int能存储的数据范围是 214
  • 【C#:学生信息管理系统-部分代码1】

    创建项目Windows窗体应用程序 创建一个DBhelp cs类 连接数据库 每次只用调用这个类就行了 这样调用 DBhelp conn Open using System using System Collections Generic
  • Open3D 计算点云包围盒

    目录 一 主要函数 1 AABB包围盒 1 1获取包围盒边长 2 OBB包围盒 2 1获取包围盒边长 二 代码实现 三 结果展示 一 主要函数 1 AABB包围盒 1 get axis aligned bounding box 获取aabb
  • 【AD20学习笔记】原理图库基础概念篇

    2022 7 6 暑假里还是跟着凡亿教育的课程再学习一遍吧 虽然这个课程已经看了很多遍了 但老是记不住 实战的时候需要在调视频看 很难受 这次再系统完整地跟一遍基础和实战 在这里记录一下 我这里一般是看完一堂课就开画了 不是很系统详细写 仅
  • clickhouse数据导入遇到的问题

    1 采用mybatis写入数据 速度很慢的问题 采用mybatis拼接sql的方式 可以写入数据 但是效率很低 每秒数据大概200 300条数据记录 2 采用jdbc写入数据 可以使用两种数据源 新版本的包 import com click
  • 如何画出一张合格的技术架构图?

    阿里妹导读 技术传播的价值 不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径 加速业务的上线速率 也体现在优秀工程师在工作效率提升 产品性能优化和用户体验改善等经验方面的分享 以提高我们的专业能力 接下来 阿里巴巴技术专家三画
  • 使用Vue过滤器格式化日期时间

    学习目标 掌握Vue过滤器 created mounted beforeDestory 等函数 学习内容 Vue过滤器 created mounted beforeDestory 实现思路 1 使用Vs code创建demo html文件
  • php下载xlsx到本地,Laravel 5.8 实现Excel 下载(将信息数据导出成Excel下载到本地)...

    目的 实现将数据表信息导出成Excel下载到本地 注 我这里用Laravel 版本 5 8 框架中实现并讲解 在laravel使用第3方插件库来完成此项工作 下面我为大家提供3个链接 供大家参考 1 Excel插件库 2 Excel官网 3
  • Mina框架及接口开发

    Mina是NIO实现的一个架构 可以通过它快速开发网络通信 中间件等服务端程序 IOService接口 描述服务端和客户端接口 子类是connector和Acceptor分别用于描述客户端和服务端 IOproceser 多线程环境来处理我们