- 浏览: 942605 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 8573一、背景资料 memcached本身是集中式的缓存系统 ... -
xmemcached 0.60 优化过程
2009-03-06 14:37 3552充分利用jprofile等 ... -
Xmemcached vs Spymemcached 3th(linux下测试结果和多节点下表现)
2009-03-07 10:43 4910翠花,上图,首先是容器类和自定义对象的get、set在不同并发 ... -
xmemcached发布1.0-BETA版
2009-03-09 15:32 4161xmemcached 发布1.0-beta ,从0.6 ... -
山寨nio框架yanf4j发布0.50-alpha
2009-02-04 19:28 4241俺的山寨nio框架yanf4j发布0.50-alpha版本,下 ... -
yanf4j引入了客户端非阻塞API
2009-02-19 00:15 3165yanf4j 发布一个0.50-beta2 版本,这个版本最 ... -
基于java nio的memcached客户端——xmemcached
2009-03-03 16:31 75141、xmemcached是什么? xmemcached是基于 ... -
使用yanf4j写个简单聊天室
2008-11-26 11:36 5409yanf4j 简介,请看这里 ... -
Java字符串的最大长度
2009-01-15 01:37 7595在cpp中为了可移植性,s ... -
yanf4j-0.41 beta发布
2009-01-20 14:01 1888项目名称:yanf4j (yet another nio fr ... -
再谈Selector的wakeup方法
2009-02-01 11:15 3061过去推荐过两篇blog《Java NIO类库Selector机 ... -
阻塞队列的性能对比
2008-09-08 10:06 5752阻塞队列的性能对 ... -
java package的设计原则
2008-09-06 00:15 2120典型的J2EE项目,package的设计有成熟的套路可 ... -
线程池池
2008-09-01 19:39 2002这个题目比较怪,听俺道来。俺一直在负责公司游戏服 ... -
第一个MapReduce任务
2008-08-23 11:10 2787前两天在公司内网上搭了个2个节点hadoop集群, ... -
从HDFS看分布式文件系统的设计需求
2008-08-15 22:39 8125分布式文件系统的 ... -
HDFS用户指南(翻译)
2008-08-14 20:27 2146HDFS用户指南 原文地址:http:/ ... -
Ehcache配置的overflowToDisk属性
2008-08-06 23:18 10845Ehcache的overflowToDisk属性用来配 ... -
工作的几个tip
2008-07-07 20:47 28921、如果用java6的ScriptEngineManager ... -
NIO的SelectableChannel关闭的一个问题
2008-06-18 01:53 7190SocketChannel和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,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...
NioServer.java
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(BIO)相比,NIO具有更高的性能和更好的灵活性。NIO在Java 1.4版本中引入,其核心是Channel、Buffer和Selector三大组件。下面...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。 ### Java NIO 概述 Java NIO 是 Java 平台的一个重要特性,首次出现在 Java 1.4 版本中。它为 Java 开发者提供了一套...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一个新特性,旨在提供一种更高效、更具选择性的I/O操作方式。相较于传统的IO模型,NIO的核心优势在于其非阻塞特性,允许...
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
Java NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java应用程序提供了非阻塞I/O操作的能力,与传统的IO模型(基于流的I/O和基于缓冲区的I/O)相比,NIO具有更高的效率和灵活性。在Java NIO中,数据是以通道...
java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...
NIO(New IO)是Java平台中用于处理输入/输出操作的一种高级API,它在Java 1.4版本中引入,以替代传统的IO流模型。NIO提供了更高效、更灵活的数据传输方式,尤其适用于高并发和大数据量的场景。 在Java的NIO体系中...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
### Java NIO 实现Socket通信详解 #### 一、NIO与传统IO的区别及优势 在探讨如何使用Java NIO实现Socket通信之前,我们需要先理解NIO(Non-blocking I/O,非阻塞I/O)与传统阻塞I/O之间的区别。 **传统阻塞I/O...
Java NIO(Non-blocking Input/Output)是Java平台中用于替代标准I/O(Blocking I/O)的一种机制。在Java NIO出现之前,传统的Java I/O基于流和套接字的模型是阻塞的,即一个线程在等待数据读取或写入时会被阻塞,...
Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...
Java NIO——Java NIO——Java NIO