日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Yet another nio framework for java

發(fā)布時(shí)間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yet another nio framework for java 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
項(xiàng)目名稱:Yanf4j(Yet another nio framework for java)
項(xiàng)目地址:http://code.google.com/p/yanf4j/,當(dāng)前版本0.30-beta1
協(xié)議:Apache License, Version 2.0
簡(jiǎn)單描述:
??? 有這么多nio框架了,為什么要another?重復(fù)造輪子也罷,這框架脫胎于一個(gè)服務(wù)器項(xiàng)目的網(wǎng)絡(luò)層代碼,期間參考了cindy、grizzly等nio框架的實(shí)現(xiàn),加上自己的一些心得體會(huì)實(shí)現(xiàn)的。特點(diǎn)是簡(jiǎn)單、小巧、超輕量級(jí)。項(xiàng)目沒有多大野心,目標(biāo)是高效、簡(jiǎn)單地實(shí)現(xiàn)非阻塞模式的Server(TCP、UDP)并且保證不錯(cuò)的性能要求,不提供客戶端API 和阻塞模式。如果你的項(xiàng)目需要實(shí)現(xiàn)一個(gè)socket server并且不希望用太重量級(jí)的框架,yanf4j是個(gè)不錯(cuò)的選擇。

??? 例子,在source archive中帶有例子,這里描述下tcp和udp的echo server的實(shí)現(xiàn)。
?一、先看TCP的Echo Server
1、實(shí)現(xiàn)處理handler,繼承HandlerAdapter類,實(shí)現(xiàn)相應(yīng)的回調(diào)方法,這與其他nio框架沒啥區(qū)別:
import?com.google.code.yanf4j.nio.Dispatcher;
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、實(shí)現(xiàn)EchoServer,核心是TCPController類的使用:

??????? Configuration?configuration?=?new?Configuration();
????????configuration.setStatisticsServer(
true);
????????configuration.setTcpSessionReadBufferSize(
256?*?1024);?//?設(shè)置讀的緩沖區(qū)大小
????????AbstractController?controller?=?new?TCPController(configuration,
????????????????
new?StringCodecFactory());
????????controller.setPort(
8080);?//?設(shè)置端口
????????controller.setReadThreadCount(1);?//?設(shè)置讀線程數(shù),通常為1
????????controller.setReceiveBufferSize(16?*?1024);?//?設(shè)置socket接收緩沖區(qū)大小
????????controller.setReuseAddress(false);?//?設(shè)置是否重用端口
????????controller.setHandler(new?EchoHandler());?//?設(shè)置handler
????????controller.setHandleReadWriteConcurrently(true);?//?設(shè)置是否允許讀寫并發(fā)處理
????????controller.addStateListener(new?ServerStateListener());
????????controller.start();

Configuration 默認(rèn)會(huì)在classpath查找yanf4j.properties屬性文件,用于配置服務(wù)器屬性,然而,你也看到,可以編碼設(shè)置這些屬性,具體參考wiki。

3、然后?沒然后了,一個(gè)TCP的echo server已經(jīng)搞定了,你可以telnet到8080端口試試了。

二、UDP的Echo server
1、handler,可以復(fù)用前面的EchoHandler
2、UDP的核心類是UDPController:

??????? Configuration?configuration?=?new?Configuration();
????????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();


? 更多細(xì)節(jié),請(qǐng)參考項(xiàng)目主頁(yè)上的wiki。

文章轉(zhuǎn)自莊周夢(mèng)蝶? ,原文發(fā)布時(shí)間2008-10-11

總結(jié)

以上是生活随笔為你收集整理的Yet another nio framework for java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。