日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java Netty HTTP服務實現過程解析

瀏覽:14日期:2022-08-27 11:12:58

超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。

在后端開發中接觸HTTP協議的比較多,目前大部分都是基于Servlet容器實現的Http服務,往往有一些核心子系統對性能的要求非常高,這個時候我們可以考慮采用NIO的網絡模型來實現HTTP服務,以此提高性能和吞吐量,Netty除了開發網絡應用非常方便,還內置了HTTP相關的編解碼器,讓用戶可以很方便的開發出高性能的HTTP協議的服務,Spring Webflux默認是使用的Netty。

接下來我們簡單的介紹下如何使用Netty來構建一個簡單的Http服務

創建一個NettyHttpServer來啟動服務

public static void main(String[] args) { int port = 2222; new NettyHttpServer().run(port);}public void run(int port) { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() {@Overridepublic void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new HttpResponseEncoder(),new HttpRequestDecoder(),new NettyHttpServerHandler());}}).option(ChannelOption.SO_BACKLOG, 128).childOption(ChannelOption.SO_KEEPALIVE, true); try { ChannelFuture f = bootstrap.bind(port).sync(); f.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); }}

需要關注的是下面的這行代碼:

ch.pipeline().addLast(new HttpResponseEncoder(),new HttpRequestDecoder(),new NettyHttpServerHandler());

HttpResponseEncoder: 服務端往客戶端發送數據的行為是Response,所以這邊要使用HttpResponseEncoder將數據進行編碼操作

HttpRequestDecoder:服務端接收到數據的行為是Request,所以要使用HttpRequestDecoder進行解碼操作

NettyHttpServerHandler:自定義的數據處理類

public class NettyHttpServerHandler extends ChannelInboundHandlerAdapter {

public class NettyHttpServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK,Unpooled.wrappedBuffer('歡迎來到猿天地'.getBytes('utf-8'))); response.headers().set(Names.CONTENT_TYPE, 'text/plain;charset=UTF-8'); response.headers().set(Names.CONTENT_LENGTH, response.content().readableBytes()); response.headers().set(Names.CONNECTION, Values.KEEP_ALIVE); ctx.write(response); ctx.flush(); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { ctx.close(); cause.printStackTrace(); }}

通過DefaultFullHttpResponse構建了返回的對象,設置了HTTP版本,返回的狀態碼,返回的內容。

返回的響應頭通過response.headers().set()進行設置。

到此為止,一個簡單的HTTP服務就實現好了,我們啟動服務,在瀏覽器中輸入http://localhost:2222/ 就可以看到頁面中顯示的內容是:歡迎來到猿天地

上面演示的是一個典型的請求響應模式,一般我們開發接口的時候通常都是需要根據請求的參數進行對應的數據返回,如何在Netty中獲取請求的參數呢?

channelRead方法中的msg參數就是請求信息,通過msg可以獲取到請求的所有信息,有請求頭信息(包括請求的地址,GET請求的參數),請求體(POST請求的數據)。

下面已GET請求的方式來獲取請求的參數信息,代碼如下:

if (msg instanceof HttpRequest) { DefaultHttpRequest request = (DefaultHttpRequest) msg; System.out.println('URI:' + request.getUri()); System.err.println(msg);}if (msg instanceof HttpContent) { LastHttpContent httpContent = (LastHttpContent) msg; ByteBuf byteData = httpContent.content(); if (byteData instanceof EmptyByteBuf) { System.out.println('Content:無數據'); } else { String content = new String(ByteUtils.objectToByte(byteData)); System.out.println('Content:' + content); }}

重啟服務,訪問地址加上參數進行訪問:http://localhost:2222/?name=yjh

可以看到控制臺輸出的內容就是一個完整的HTTP請求包含的信息:

URI:/?name=yjhDefaultHttpRequest(decodeResult: success, version: HTTP/1.1)GET /?name=yjh HTTP/1.1Host: localhost:2222Connection: keep-aliveUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cookie: _ga=GA1.1.939107719.1520393952; JSESSIONID=EE205236911D5BBA145E3021DB472D90Content:無數據

本文只是簡單的介紹了如何在Netty中去實現HTTP服務,如果想要做成Spring MVC這樣的框架那后面的路還很長,請求響應Netty內置了編解碼器,還是有很多工作需要自己去做的。比如參數的獲取,請求的路由,參數映射成對象等….

源碼參考:https://github.com/yinjihuan/netty-im

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲天堂1区| 欧美日韩国产高清电影| 精品精品99| 日韩三级精品| 日韩中文在线播放| 日本不卡一二三区黄网| 亚洲精品一二三区区别| a天堂资源在线| 日韩精品三级| 久久国产精品亚洲77777| 色黄视频在线观看| 国产亚洲精品v| 亚洲精品99| 成人啊v在线| 欧美aa一级| 日韩精品第一区| 国产中文欧美日韩在线| 欧美日韩va| 欧美在线看片| 国产亚洲精aa在线看| 激情五月综合网| 天堂日韩电影| 91av亚洲| 久久三级福利| 999国产精品视频| 午夜日韩av| 亚洲资源在线| 日本视频在线一区| 国产精久久久| 精品国产亚洲一区二区三区在线| 国产精久久久| 裤袜国产欧美精品一区| 亚洲成人精选| 青青草国产精品亚洲专区无| 欧美久久香蕉| 国产精品极品在线观看| 精品国产中文字幕第一页| xxxxx性欧美特大| 蜜臀久久99精品久久久画质超高清| 欧美精品中文字幕亚洲专区| 美女视频黄免费的久久| 超碰99在线| 激情偷拍久久| 蜜桃视频一区二区三区 | 国产字幕视频一区二区| 免费观看在线综合| 国产欧美日韩影院| 蜜桃国内精品久久久久软件9| 亚洲欧美专区| 久久不卡日韩美女| 99国产精品久久久久久久| 国产欧美日韩免费观看| 久久亚洲专区| 欧美一级久久| 亚洲午夜av| 牛牛精品成人免费视频| 国产精品日韩欧美一区| 黄色aa久久| 欧美亚洲三区| 亚洲综合精品四区| а√天堂8资源中文在线| 视频国产精品| 欧美福利一区| 国产精品极品在线观看| 不卡在线一区| 高清不卡一区| 欧美在线首页| 日韩影院精彩在线| 国产91精品对白在线播放| 色乱码一区二区三区网站| 国产欧美一区二区三区精品酒店 | 久久国产中文字幕| 一区二区自拍| 美国三级日本三级久久99 | 日本aⅴ亚洲精品中文乱码 | 久久激情综合网| 精品黄色一级片| 亚洲最新无码中文字幕久久| 国产综合亚洲精品一区二| 久久高清免费观看| 国产探花在线精品| 国产福利片在线观看| 国产精品88久久久久久| 好吊视频一区二区三区四区| 日韩av一区二区三区四区| 久久一区精品| 国产视频一区免费看| 国产精品一国产精品k频道56| 日韩精品电影| 国产伦理久久久久久妇女| 激情综合网站| 国产精品第一国产精品| 亚洲精品99| 久久99性xxx老妇胖精品| 偷拍欧美精品| 色欧美自拍视频| 亚洲精品免费观看| 中文字幕一区久| 国产亚洲欧洲| 欧美激情网址| 国产婷婷精品| 激情久久一区二区| 免费久久99精品国产自在现线| 国产在线日韩精品| japanese国产精品| 成人在线免费观看91| 在线精品一区| 久久久五月天| 欧美国产亚洲精品| 久久亚洲电影| 蜜桃视频在线网站| 国产精品一区二区精品视频观看| 伊人久久亚洲美女图片| 国产精品1区在线| 一本一道久久a久久| 亚洲二区在线| 亚洲天堂一区二区| 精品国产a一区二区三区v免费| 亚洲香蕉视频| 欧美日韩国产在线一区| 亚洲一级少妇| 精品国产欧美| 国产日韩欧美一区在线| 日韩在线a电影| 综合一区在线| 日韩精品一二三四| 亚洲少妇在线| 亚洲大全视频| 成人久久一区| 日韩精品诱惑一区?区三区| 欧美xxxx性| 麻豆国产欧美日韩综合精品二区| 欧美一区二区三区久久精品| 亚洲精品极品| 亚欧洲精品视频在线观看| 亚洲精一区二区三区| 天堂成人免费av电影一区 | 亚洲黄页一区| 亚洲伊人影院| 欧美日韩一区二区三区四区在线观看 | 成人台湾亚洲精品一区二区| 国产免费av一区二区三区| 国产日韩1区| 黄色欧美在线| 激情久久久久久| 亚洲免费婷婷| 免费人成黄页网站在线一区二区| 亚洲免费播放| 视频一区二区三区入口| 中文字幕亚洲精品乱码| 国产亚洲精品精品国产亚洲综合| 国产精品igao视频网网址不卡日韩| 国产高清视频一区二区| 国精品产品一区| 久久三级视频| 热久久免费视频| 国产精品亚洲欧美日韩一区在线| 国产精品1区在线| 欧美日韩视频网站| 喷白浆一区二区| 国产精品亚洲成在人线| 麻豆久久一区| 黄色成人91| 国产福利资源一区| 亚洲先锋成人| 国产乱子精品一区二区在线观看 | 婷婷激情综合| 久久这里只有精品一区二区| 日韩精品首页| 欧美日韩国产一区二区在线观看| 成人午夜在线| 亚洲精品动态| 99久久婷婷| 国产一区二区三区不卡视频网站 | 日韩有吗在线观看| 亚洲天堂1区| 国产精品一区二区美女视频免费看| 中文字幕成在线观看| 日韩精品a在线观看91| 亚洲手机在线| 国产成人免费| 国产精品一区二区精品视频观看 | 日韩av在线中文字幕| 日av在线不卡| 国产字幕视频一区二区| 国产成人精品一区二区免费看京| 亚洲一区二区小说| 精品一区毛片| 色婷婷精品视频| 色综合狠狠操| 精品国产黄a∨片高清在线| 欧美日韩亚洲一区二区三区在线| 亚洲激情av| 国产精品99免费看| 日韩成人综合| zzzwww在线看片免费| 都市激情国产精品| 精品视频一区二区三区四区五区| 日韩精品亚洲专区| 日韩在线观看中文字幕|