- 浏览: 928562 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hw7777777:
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?1、 ...
基于java nio的memcached客户端——xmemcached -
SINCE1978:
多久过去了时间能抹平一切
无路用的人 -
fangruanyjq:
[img][/img]引用
用osworkflow写一个请假例子(提供代码下载) -
thinkingmysky:
楼主,你确定,java memached client能处理并 ...
memcached java client性能测试的几点疑问和说明 -
hellostory:
aaa5131421 写道07年2月hibernate已经出来 ...
dozer与BeanUtils
项目名称:Yanf4j(Yet another nio framework for java)
项目地址:http://code.google.com/p/yanf4j/
,当前版本0.30-beta1
协议:Apache License, Version 2.0
简单描述:
有这么多nio框架了,为什么要another?重复造轮子也罢,这框架脱胎于一个服务器项目的网络层代码,期间参考了cindy、grizzly等nio框架的实现,加上自己的一些心得体会实现的。特点是简单、小巧、超轻量级。项目没有多大野心,目标是高效、简单地实现非阻塞模式的Server(TCP、UDP)并且保证不错的性能要求,不提供客户端API 和阻塞模式。如果你的项目需要实现一个socket server并且不希望用太重量级的框架,yanf4j是个不错的选择。
例子,在source archive中带有例子,这里描述下tcp和udp的echo server的实现。
一、先看TCP的Echo Server
1、实现处理handler,继承HandlerAdapter类,实现相应的回调方法,这与其他nio框架没啥区别:
import com.google.code.yanf4j.nio.Session;
import com.google.code.yanf4j.nio.impl.HandlerAdapter;
import com.google.code.yanf4j.nio.util.DispatcherFactory;
public class EchoHandler extends HandlerAdapter < String > {
Dispatcher dispatcher = DispatcherFactory.newDispatcher( 4 );
@Override
public void onException(Session session, Throwable t) {
t.printStackTrace();
}
@Override
public void onMessageSent(Session session, String t) {
System.out.println( " sent " + t + " to "
+ session.getRemoteSocketAddress());
}
@Override
public void onSessionStarted(Session session) {
System.out.println( " session started " );
session.setUseBlockingRead( true );
session.setUseBlockingWrite( false );
}
public void onSessionCreated(Session session) {
System.out.println(session.getRemoteSocketAddress().toString()
+ " connected " );
}
public void onSessionClosed(Session session) {
System.out.println(session.getRemoteSocketAddress().toString()
+ " disconnected " );
}
public void onReceive( final Session session, final String msg) {
System.out.println( " recv: " + msg);
if (msg != null )
dispatcher.dispatch( new Runnable() {
public void run() {
if (msg.equals( " q " ))
session.close();
session.send(msg);
}
});
}
}
2、实现EchoServer,核心是TCPController类的使用:
configuration.setStatisticsServer( true );
configuration.setTcpSessionReadBufferSize( 256 * 1024 ); // 设置读的缓冲区大小
AbstractController controller = new TCPController(configuration,
new StringCodecFactory());
controller.setPort( 8080 ); // 设置端口
controller.setReadThreadCount( 1 ); // 设置读线程数,通常为1
controller.setReceiveBufferSize( 16 * 1024 ); // 设置socket接收缓冲区大小
controller.setReuseAddress( false ); // 设置是否重用端口
controller.setHandler( new EchoHandler()); // 设置handler
controller.setHandleReadWriteConcurrently( true ); // 设置是否允许读写并发处理
controller.addStateListener( new ServerStateListener());
controller.start();
Configuration 默认会在classpath查找yanf4j.properties属性文件,用于配置服务器属性,然而,你也看到,可以编码设置这些属性,具体参考wiki。
3、然后?没然后了,一个TCP的echo server已经搞定了,你可以telnet到8080端口试试了。
二、UDP的Echo server
1、handler,可以复用前面的EchoHandler
2、UDP的核心类是UDPController:
configuration.setTcpPort( 8090 );
configuration.setTcpReuseAddress( false );
configuration.setStatisticsServer( true );
configuration.setTcpNoDelay( true );
configuration.setTcpReadThreadCount( 1 );
configuration.setTcpRecvBufferSize( 16 * 1024 );
UDPController controller = new UDPController(configuration);
controller.setMaxDatagramPacketLength( 1024 );
controller.setHandler( new EchoHandler());
controller.start();
更多细节,请参考项目主页上的wiki。
发表评论
-
memcached分布测试报告(一致性哈希情况下的散列函数选择)
2009-03-10 16:30 8450一、背景资料 memcached本身是集中式的缓存系统 ... -
xmemcached 0.60 优化过程
2009-03-06 14:37 3420充分利用jprofile等 ... -
Xmemcached vs Spymemcached 3th(linux下测试结果和多节点下表现)
2009-03-07 10:43 4780翠花,上图,首先是容器类和自定义对象的get、set在不同并发 ... -
xmemcached发布1.0-BETA版
2009-03-09 15:32 4007xmemcached 发布1.0-beta ,从0.6 ... -
山寨nio框架yanf4j发布0.50-alpha
2009-02-04 19:28 4156俺的山寨nio框架yanf4j发布0.50-alpha版本,下 ... -
yanf4j引入了客户端非阻塞API
2009-02-19 00:15 2984yanf4j 发布一个0.50-beta2 版本,这个版本最 ... -
基于java nio的memcached客户端——xmemcached
2009-03-03 16:31 73351、xmemcached是什么? xmemcached是基于 ... -
使用yanf4j写个简单聊天室
2008-11-26 11:36 5374yanf4j 简介,请看这里 ... -
Java字符串的最大长度
2009-01-15 01:37 7546在cpp中为了可移植性,s ... -
yanf4j-0.41 beta发布
2009-01-20 14:01 1820项目名称:yanf4j (yet another nio fr ... -
再谈Selector的wakeup方法
2009-02-01 11:15 3012过去推荐过两篇blog《Java NIO类库Selector机 ... -
阻塞队列的性能对比
2008-09-08 10:06 5705阻塞队列的性能对 ... -
java package的设计原则
2008-09-06 00:15 2093典型的J2EE项目,package的设计有成熟的套路可 ... -
线程池池
2008-09-01 19:39 1973这个题目比较怪,听俺道来。俺一直在负责公司游戏服 ... -
第一个MapReduce任务
2008-08-23 11:10 2750前两天在公司内网上搭了个2个节点hadoop集群, ... -
从HDFS看分布式文件系统的设计需求
2008-08-15 22:39 8060分布式文件系统的 ... -
HDFS用户指南(翻译)
2008-08-14 20:27 2114HDFS用户指南 原文地址:http:/ ... -
Ehcache配置的overflowToDisk属性
2008-08-06 23:18 10772Ehcache的overflowToDisk属性用来配 ... -
工作的几个tip
2008-07-07 20:47 28331、如果用java6的ScriptEngineManager ... -
NIO的SelectableChannel关闭的一个问题
2008-06-18 01:53 7132SocketChannel和ServerSocket ...
相关推荐
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
Gecko基于yanf4j(Yet another nio framework for java)构建,这是一个Reactor+Handler模式的NIO框架。框架的主要组件包括: - **Controller**:控制接口,负责启动、管理、停止框架,并与业务代码交互。 - **...
java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket
NioServer.java
java NIO.zip
讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
Java NIO英文高清原版
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
java nio使用示例,介绍了java nio的常用类及使用方法
java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
JavaNIO服务器实例Java开发Java经验技巧共6页.pdf.zip
nio教程,好的入门教材 ,
java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...
Using NIO to copy Java file fast
java NIO技巧及原理解析,java IO原理,NIO框架分析,性能比较
java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...
实例介绍了一个简单的nio实例,适合刚接触nio的童鞋们....
java.nio (NIO stands for non-blocking I/O) is a collection of Java programming language APIs that offer features for intensive I/O operations. It was introduced with the J2SE 1.4 release of Java by ...