linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux软件 >

高性能Java网络框架 MINA

时间:2016-10-16  来源:未知  作者:linuxsir首页

1。介绍

Apache MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。它通过Java NIO提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如TCP/IP和UDP/IP)之上的API,

Apache MINA 通常可被称之为:

NIO 框架库;
客户端/服务器框架库;
或者一个网络socket库。

然而,它所提供的功能远不止这些。

(以上内容大致翻译自Apache MINA网站)

如官方文档的介绍,Apache MINA 是一个网络应用程序框架,它对Java中的socket和NIO进行了有效和清晰的封装,方便开发人员开发TCP/UDP程序,从而抛开在使用原始的socket时需要考虑的各种繁杂而又烦人问题(线程、性能、会话等),把更多精力专著在应用中的业务逻辑的开发上。

Apache MINA 有两个主要版本:2.0 和 1.1,2.0与1.1有较大的区别,其采用java NIO进行开发,使得性能得到有效的提升,在接口方面也有不小的变化,具体信息可以参见其网站说明。

下面的介绍以 Apache MINA 2.0 为例。

2。软件准备

要编写和运行一个基于Apache MINA 2.0的程序,需要JDK 5.0以上版本,还需要以下软件:

(1)MINA 2.x Core

下载地址:http://mina.apache.org/downloads.html

(2)SLF4J 1.3.0 or greater

下载地址:http://www.slf4j.org/download.html

这里需要用到两个 SLF4J 的jar包:slf4j-api.jar 和 slf4j-jdk14.jar。

分别解压下载的MINA 2.x Core 和SLF4J文件,找出下列jar包文件:

mina-core-2.0.0-M1.jar
slf4j-api.jar
slf4j-jdk14.jar

3。编写一个Apache MINA 时间服务器

该程序的功能非常简单,就是当客户端连接到服务器的9123端口后,程序将服务器当前的时间信息以字符串的形式发送给客户端。

我们可以用Eclipse来创建编写这个程序。

(1)在Eclipse中创建一个Java项目,例如 TimeServerProject,然后将mina-core-2.0.0-M1.jar、slf4j-api.jar 和 slf4j-jdk14.jar这三个文件添加到项目的Libraries中。

(2)创建一个 MinaTimeServer 类,其内容为:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaTimeServer {
private static final int PORT = 9123;

public static void main(String[] args) throws IOException {
  IoAcceptor acceptor = new NioSocketAcceptor();

  acceptor.getFilterChain().addLast("logger", new LoggingFilter());
  acceptor.getFilterChain().addLast(
    "codec",
    new ProtocolCodecFilter(new TextLineCodecFactory(Charset
      .forName("UTF-8"))));

  acceptor.setHandler(new TimeServerHandler());
  acceptor.getSessionConfig().setReadBufferSize(2048);
  acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
  acceptor.bind(new InetSocketAddress(PORT));
}
}


(3)创建一个 TimeServerHandler 类,其内容为:

import java.util.Date;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;

public class TimeServerHandler extends IoHandlerAdapter {
@Override
public void exceptionCaught(IoSession session, Throwable cause)
    throws Exception {
  cause.printStackTrace();
}

@Override
public void messageReceived(IoSession session, Object message)
    throws Exception {
  String str = message.toString();
  System.out.println("Message read:");
  System.out.println(str);

  Date date = new Date();
  session.write(date.toString());
  System.out.println("Message written...");
  session.close();
}

@Override
public void sessionIdle(IoSession session, IdleStatus status)
    throws Exception {
  System.out.println("IDLE " + session.getIdleCount(status));
}
}


(4)编译并运行MinaTimeServer类

(5)打开您的浏览器,在地址栏中输入 http://127.0.0.1:9123/,然后回车,你就可以看到服务器的时间显示在您的浏览器内了。同时您也可以在运行MinaTimeServer的控制台窗口中看到类似下面的信息:

Message read:2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log
信息: CREATED
2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log
信息: OPENED
2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log
信息: RECEIVED: HeapBuffer[pos=0 lim=261 cap=2048: 47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A...]

GET / HTTP/1.1
Message written...
Message read:
Accept: */*
Message written...
Message read:
Accept-Language: zh-cn,en-US;q=0.5
Message written...
Message read:
UA-CPU: x86
Message written...
Message read:
Accept-Encoding: gzip, deflate
Message written...
Message read:
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Message written...
Message read:
Host: 127.0.0.1:9123
Message written...
Message read:
Connection: Keep-Alive
Message written...
Message read:

Message written...
2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log
信息: SENT: HeapBuffer[pos=0 lim=29 cap=30: 46 72 69 20 41 70 72 20 31 31 20 31 32 3A 32 32...]
2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log
信息: SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log
信息: CLOSED

这是程序的日志信息以及,浏览器发送过来请求的HTTP头信息。

(6)或者也可以通过telnet连接服务器的9123端口,连敲两次回车,就可以看到服务器发送过来的时间信息了。

 

linux
上一篇:Spring LDAP
友情链接
  • Rancher推出了第一款Kubernetes操作系统k3OS
  • Kotlin v1.3.31发布,基于JVM的编程语言
  • Wine 4.7 更新,Mono引擎及更多
  • RenderDoc 1.3 发布,受欢迎的图形调试器
  • GitLab 11.10 发布,增强的操作仪表板
  • Wine
  • GNOME 3.33.1发布,GNOME 3.34 桌面环境开发第一个快照
  • 韦诺之战 Battle For Wesnoth 1.14.7/1.14.8 发布,Ubuntu下安装
  • Fedora 32可能删除Python 2及其软件包
  • OpenAI推出MuseNet:一种用于生成音乐作品的深层神经网络
  • KernelShark 1.0 即将发布,用于可视化“Trace
  • 清华大学与中科大相继停止 Anaconda 镜像服务
  • 用于Apache Spark 预览版的.NET现已推出
  • Fedora考虑使用基于VESA的FBDEV驱动程序,取代旧的VESA和OpenChr
  • Rails 6.0.0 RC1发布,多数据库支持
  • GCC 9.1
  • Electron 5.0 发布,附带了新版本的Chromium,V8和Node.js
  • Linux 5.2内核引入通用计数器接口
  • 由于一些遗留的bug阻塞,Fedora 30 是否延迟发布还未知
  • Fedora 30 将于下周二发布
  • GCC 9.1
  • 流媒体应用程序Mobdro窃取用户Wi
  • Google Chrome 74 正式发布,但对Linux用户来说并不令人兴奋
  • Apple发布iOS 12.3,macOS 10.14.5,tvOS 12.3和watchOS 5.2.1的
  • MESA 19.1公开EXT
  • Intel Iris Gallium3D为Mesa 19.1提供更多的游戏性能优化
  • 为什么这么多用户已经将Google Chrome替换为新的Microsoft Edge
  • MongoDB将以3900万美元收购移动数据库管理系统Realm
  • NVIDIA 430.09 Linux驱动发布,带来GTX 1650支持
  • 微软发布适用于Windows 10的4K壁纸包
  • Rust分享2019年的路线图
  • GNU Shepherd 0.6 发布,增加一次性服务
  • 随着三星最新的DeX更新,更多的手机可以使用Linux
  • Fedora将支持MPEG
  • QEMU 4.0 发布,更快的加密与CPU支持的改进
  • Google正在Android Q Beta 2中测试新的滑动手势
  • OS108
  • Svelte 3 稳定版发布,Cyber??netically增强型网络应用程序
  • Ant Design 3.16.5 发布,企业级UI设计语言
  • NVIDIA为Nsight Systems增加Vulkan支持
  • Node.js 12 Current版发布,使用V8 JavaScript引擎
  • Apple发布iOS 12.3,macOS 10.14.5,tvOS 12.3和watchOS 5.2.1的
  • Linux 5.1遇到了针对Intel和VirtIO DRM驱动程序的“特殊回归”
  • Kodi 19 M的代号揭晓
  • Scientific Linux 6/7 将继续得到支持,但分发工作正在结束
  • 福彩3d乐彩论坛
  • 澳门百家乐
  • 天吉彩票论坛
  • 香港自由论坛
  • 澳门银河