Mina主要是作为服务器端底层框架来实现数据处理,它的实现很简单,如下例所示:
- package com.gftech.mytool.mina;
- import java.io.IOException;
- import java.net.InetSocketAddress;
- import java.nio.charset.Charset;
- import java.util.Date;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.apache.mina.core.service.IoAcceptor;
- import org.apache.mina.core.service.IoHandlerAdapter;
- import org.apache.mina.core.session.IdleStatus;
- import org.apache.mina.core.session.IoSession;
- import org.apache.mina.filter.codec.ProtocolCodecFilter;
- import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
- import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
- public class MinaTimeServer {
- private static final int PORT = 2500;
-
-
-
- static Logger logger = LoggerFactory.getLogger(MinaTimeServer.class);
- public static void main(String[] args) throws IOException {
-
- IoAcceptor acceptor = new NioSocketAcceptor();
-
-
- LoggingFilter lf = new LoggingFilter("testLog");
- acceptor.getFilterChain().addLast("logger", lf);
-
- acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("GBK"))));
-
- acceptor.getSessionConfig().setReadBufferSize(10);
- acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
-
- acceptor.setHandler(new TimeServerHandler());
-
- acceptor.bind(new InetSocketAddress(PORT));
- System.out.println("start server ...");
- }
- }
- class TimeServerHandler extends IoHandlerAdapter {
- static Logger logger = LoggerFactory.getLogger(TimeServerHandler.class);
-
-
- public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
- cause.printStackTrace();
- }
-
- public void messageReceived(IoSession session, Object message) throws Exception {
- String str = message.toString();
- if (str.trim().equalsIgnoreCase("quit")) {
- session.close(true);
- return;
- }
- logger.debug("Rec:" + str);
- Date date = new Date();
- session.write(date.toString());
- logger.debug("Message written...");
- }
-
- public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
- logger.debug("IDLE " + session.getIdleCount(status));
- }
- }
在上面的代码中,我用了mina默认的SLF4J日志处理器。因为slf4j本身没有真正的日志处理功能,它最终调用的是log4j,所以我们可以编写一下log4j的配置文件来指定具体的输出方式。需要注意的一点是配置文件必须放在src文件夹下面,否则slf4j无法找到,示例如下:
- log4j.rootLogger =DEBUG, A1,A2
- #输出到控制台
- log4j.appender.A1 = org.apache.log4j.ConsoleAppender
- log4j.appender.A1.layout = org.apache.log4j.PatternLayout
- log4j.appender.A1.layout.ConversionPattern =[%d] [%t] %-5p - %m %n
- #输出到固定大小的日志文件
- log4j.appender.A2 = org.apache.log4j.RollingFileAppender
- log4j.appender.A2.File = logs
- log4j.appender.A2.MaxFileSize = 1MB
- log4j.appender.A2.MaxBackupIndex = 3
- log4j.appender.A2.layout = org.apache.log4j.PatternLayout
- log4j.appender.A2.layout.ConversionPattern =[%d] %-4r [%t] %-5p %c %x - %m %n
- #定义A3输出到数据库
- log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender
- log4j.appender.A3.BufferSize = 40
- log4j.appender.A3.Driver = sun.jdbc.odbc.JdbcOdbcDriver
- log4j.appender.A3.URL = jdbc:ODBC:driver={Microsoft Access Driver (*.mdb)};DBQ=MobileDB.mdb
- log4j.appender.A3.User =
- log4j.appender.A3.Password =
- log4j.appender.A3.layout = org.apache.log4j.PatternLayout
- log4j.appender.A3.layout.ConversionPattern = INSERT INTO log4j(createDate, thread, priority, category, message) values('%d', '%t', '%-5p', '%c', '%m')
- #输出到HTML文件当中,并按日期自动分割
- log4j.appender.A4 = org.apache.log4j.DailyRollingFileAppender
- log4j.appender.A4.File = logs
- log4j.appender.A4.DatePattern='.'yyyy-MM-dd-HH'.html'
- log4j.appender.A4.layout = org.apache.log4j.HTMLLayout
- #A5 send log info to remote mysql database
- log4j.appender.A5 = com.gftech.log4j.JDBCExtAppender
- log4j.appender.A5.Driver = com.mysql.jdbc.Driver
- log4j.appender.A5.URL = jdbc:mysql:
- log4j.appender.A5.User = root
- log4j.appender.A5.Password = plus
- log4j.appender.A5.layout = org.apache.log4j.PatternLayout
- log4j.appender.A5.sql = INSERT INTO app_log(machine,occur_date,thread_name,cat,level,info) values('DP','%d{yyyy-MM-dd HH:mm:ss}','%t','%c','%p','%m')
- #A6 send log info(ERROR or Fatal) by Email
- log4j.appender.A6 = com.gftech.log4j.SMTPExtAppender
- log4j.appender.A6.Threshold=FATAL
- log4j.appender.A6.SMTPHost=smtp.126.com
- log4j.appender.A6.to=sinboy@126.com
- log4j.appender.A6.from=sinboy@126.com
- log4j.appender.A6.SMTPAuth=true
- log4j.appender.A6.SMTPUsername=sinboy
- log4j.appender.A6.SMTPPassword=123456
- log4j.appender.A6.Subject=Log4J Message
- log4j.appender.A6.layout=org.apache.log4j.PatternLayout
- log4j.appender.A6.layout.ConversionPattern= [%d{HH:mm:ss}] [%t] %c - %-5p - %m%n
在命令行终端输入:telnet 127.0.0.1 2500可以进行测试,当然也可以自己模拟多个客户端进行并发访问测试mina的真实性能。我在P4/512M的机器上测出的结果是每秒可以处理1700~2000个数据,,根据并发客户端的多少会有不同。
分享到:
相关推荐
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
一个Apache MINA使用案例源代码ApacheMina
深入理解Apache_Mina_(1)----_Mina的几个类 深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和...
Apache MINA 线程模型配置 Mina配置
这个是我学的apache mina2.0学习笔记的实例
收集整理的Apache Mina chm pdf教程和帮助文档
Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。 apache-mina-2.0.7-bin.zip,apache-mina-2.0.7-src.zip,log4j-1.2.17.zip,slf4j-api-1.6.6.jar,slf4j-api-1.6.6-...
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...
apache mina的入门完整学习资料,附加中文参考手册。
apache mina 简单示例apache mina 简单示例apache mina 简单示例apache mina 简单示例apache mina 简单示例apache mina 简单示例
Apache MINA2实用手册 Apache MINA2实用手册
apache mina实例免费下载,有很多实例代码简单易懂欢迎大家下载!
apache mina chm 格式的api帮助文档。
Apache MINA 2.0 用户指南
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的...
最新的Apache Mina v2.0.8 API手册,chm格式,2014年9月下旬制作。
最近做rfid读写,C#和java都用udp不用厂家的动态库,udp自己写也简单,但是试了一下Apache mina ,接收的不是string,二十byte[] 数组,简单实现了UDP,网上也有例子,但是不是我要的。可用。
本资源包含两个 pdf 文档,一本根据官方最新文档 (http://mina.apache.org/mina-project/userguide/user-guide-toc.html) 整理的 mina_2.0_user_guide_en.pdf,一个中文翻译的 mina_2.0_user_guide_cn.pdf。...
很详细的描述了apache mina 框架,对于那些对于英文不是很懂得人,这简直就是福音啊,哈哈
最近一直在看 Mina 的源码,用了 Mina 这么长时间,说实话,现在才开始对 Mina 有了一 些 深刻的理解,关于 Mina 的基本知识的介绍,这里就不多说了,网上已经有很多不错的文 章 都对 Mina 做了较深刻的剖析,现在...