Netty小demo(一)

實(shí)驗(yàn)

改造NIO實(shí)現(xiàn)的TimeServer

代碼

  • TimeServer
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * 時間協(xié)議服務(wù)端
 * Created by liqiushi on 2017/12/14.
 */
public class TimeServer {

    public static void main(String[] args) {
        //1夺溢、創(chuàng)建兩個線程組 一個是接受連接,一個是用來處理連接
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        
        //2涨岁、需要一個輔助類ServerBootstrap
        ServerBootstrap b = new ServerBootstrap();
        
        b.group(bossGroup,workerGroup)
                .channel(NioServerSocketChannel.class) //創(chuàng)建ServerSocketChannel
                .option(ChannelOption.SO_BACKLOG,1024)
                //.childHandler(new ChildChannelHandler());
                .childHandler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                        ch.pipeline().addLast(new TimeServerHandler());
                    }
                });
        
        //3杭跪、綁定端口
        try {
            ChannelFuture f = b.bind(8001).sync();
            
            //4朗恳、等待服務(wù)端監(jiān)聽端口關(guān)閉
            f.channel().closeFuture().sync();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            //釋放線程池資源
            System.out.println("release!");
            workerGroup.shutdownGracefully();
            bossGroup.shutdownGracefully();
        }
    }
}
  • TimeServerHandler
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;

import java.util.Date;

/**
 * Created by liqiushi on 2017/12/14.
 */
public class TimeServerHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("connect established!");
        super.channelActive(ctx);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ByteBuf readBuf = (ByteBuf) msg;
        byte[] req = new byte[readBuf.readableBytes()];
        readBuf.readBytes(req);
        
        String body = new String(req,"UTF-8");
        System.out.println("The time server receive order :"+body);
        String currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body)?
                new Date(System.currentTimeMillis()).toString():"BAD ORDER";
        ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes());
        ChannelFuture f = ctx.writeAndFlush(resp);
        f.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) {
                System.out.println("compeleted!");
                assert f == future;
                ctx.close();
            }
        }); 
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        super.exceptionCaught(ctx, cause);
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子络它,更是在濱河造成了極大的恐慌咖城,老刑警劉巖茬腿,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宜雀,居然都是意外死亡切平,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門辐董,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悴品,“玉大人,你說我怎么就攤上這事√ρ希” “怎么了菇存?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邦蜜。 經(jīng)常有香客問我依鸥,道長,這世上最難降的妖魔是什么悼沈? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任贱迟,我火速辦了婚禮,結(jié)果婚禮上絮供,老公的妹妹穿的比我還像新娘衣吠。我一直安慰自己,他們只是感情好壤靶,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布缚俏。 她就那樣靜靜地躺著,像睡著了一般贮乳。 火紅的嫁衣襯著肌膚如雪忧换。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天向拆,我揣著相機(jī)與錄音亚茬,去河邊找鬼。 笑死浓恳,一個胖子當(dāng)著我的面吹牛刹缝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颈将,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼梢夯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晴圾?” 一聲冷哼從身側(cè)響起颂砸,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疑务,沒想到半個月后沾凄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡知允,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叙谨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温鸽。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涤垫,到底是詐尸還是另有隱情姑尺,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布蝠猬,位于F島的核電站切蟋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏榆芦。R本人自食惡果不足惜柄粹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匆绣。 院中可真熱鬧驻右,春花似錦、人聲如沸崎淳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拣凹。三九已至森爽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚣镜,已是汗流浹背拗秘。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祈惶,地道東北人雕旨。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像捧请,于是被迫代替她去往敵國和親凡涩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,275評論 25 707
  • 在上一篇文章中對于I/O模型已經(jīng)講的比較清楚了疹蛉,在I/O密集型應(yīng)用中使用Reactor模式可以明顯提高系統(tǒng)的性能(...
    TheAlchemist閱讀 885評論 2 8
  • 1活箕、Netty基礎(chǔ)入門 Netty是由JBOSS提供的一個java開源框架。Netty提供異步的可款、事件驅(qū)動的網(wǎng)絡(luò)應(yīng)...
    我是嘻哈大哥閱讀 4,693評論 0 31
  • 1.第n-1頁的末尾插入分節(jié)符 注:需開啟顯示\隱藏編輯標(biāo)記 2.點(diǎn)開第n頁的頁腳育韩,然后點(diǎn)頁碼中的設(shè)計當(dāng)前格式,起...
    monkey_y閱讀 130評論 0 0
  • 不要把要做的事情停留在嘴上,不是所有人都肯等你摸恍,當(dāng)他們頭像變灰悉罕,你的行動力再強(qiáng)悍赤屋,也無處施展了…… ...
    CanonLee閱讀 347評論 0 2