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

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

Java Netty HTTP服務實現過程解析

瀏覽:20日期: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久久,三上悠亚国产精品一区二区三区
国产精品巨作av| 国产日产高清欧美一区二区三区| 日韩美女国产精品| 99久久久久久中文字幕一区| 国产va免费精品观看精品视频| 国产麻豆一区| 久久不卡日韩美女| 97精品久久| 久久久精品区| 麻豆精品蜜桃视频网站| 高潮一区二区| 99国产精品私拍| 蜜臀久久久99精品久久久久久| 日韩精品a在线观看91| 久久狠狠久久| 久久久免费人体| 日韩精品91亚洲二区在线观看| 成人看片网站| 97精品国产福利一区二区三区| 在线精品一区| 亚洲成人二区| 色吊丝一区二区| 国产麻豆一区| 日本精品影院| 国产美女高潮在线| 国产人成精品一区二区三| 亚洲一二av| 91精品国产调教在线观看| 精品欧美久久| 免费在线观看一区二区三区| 国产一区二区高清| 久久午夜精品一区二区| 日韩精品免费一区二区夜夜嗨| 国产福利一区二区精品秒拍 | 国产99亚洲| 中文字幕乱码亚洲无线精品一区| 久久精品超碰| 婷婷国产精品| 久久99影视| 日韩一区二区免费看| 麻豆精品视频在线观看| 蜜臀av免费一区二区三区| 亚洲国产一区二区在线观看| 国产精品亚洲欧美| 香蕉久久久久久久av网站| 久久电影tv| 久久激情综合网| 婷婷成人av| 激情综合激情| 欧美一级鲁丝片| 久久香蕉网站| 国产精品成人**免费视频| 免费不卡在线视频| 亚洲成人不卡| 日韩免费看片| 99tv成人| 亚洲一区成人| 亚洲另类av| 亚洲精品第一| 国产精品久久久久9999高清| 久久av免费| 亚洲国产综合在线看不卡| 亚洲欧美日本国产| 麻豆一区二区三区| 国产精品88久久久久久| 日本午夜精品一区二区三区电影| 国产精品中文字幕制服诱惑| 免费在线小视频| 色8久久久久| 国产h片在线观看| 亚洲精品进入| 欧美精品高清| 亚洲日产国产精品| 日韩欧美少妇| 国产剧情一区二区在线观看| 午夜视频精品| 亚洲美女久久精品| 国产精品中文| 亚洲乱码视频| 免费久久精品| 综合日韩av| 欧美国产免费| 天堂va欧美ⅴa亚洲va一国产| 999久久久免费精品国产| 久久免费影院| 国产精品亚洲综合久久| 男女激情视频一区| 久久免费黄色| 成人影视亚洲图片在线| 国产精品s色| 国产精品羞羞答答在线观看| 精品视频免费| 国产v日韩v欧美v| 国产欧美亚洲一区| 欧美成人aaa| 久久天堂影院| 激情视频网站在线播放色| 国产精品一二| 亚洲中字黄色| 日韩中文字幕| 日韩精品导航| 久久国产麻豆精品| 国产亚洲人成a在线v网站| 91午夜精品| 动漫av一区| 激情欧美一区二区三区| 久久久精品日韩| 午夜精品婷婷| 国产精品伦一区二区| 亚洲啊v在线| 欧美69视频| 综合激情视频| 国产调教精品| 在线精品亚洲欧美日韩国产| 亚洲大片在线| 亚洲美女久久| 国内精品美女在线观看| 老牛影视精品| 久久福利毛片| 国产一区日韩| 亚洲字幕久久| 中文字幕人成乱码在线观看| 夜久久久久久| 久久精品免费看| 久久高清国产| 成人在线视频区| 免费成人av在线播放| 另类专区亚洲| 日韩精品视频中文字幕| 91看片一区| 国产精品免费精品自在线观看| 欧美日韩精品一本二本三本| 亚洲毛片网站| 国产日韩视频在线| 亚洲欧洲高清| 久久亚洲美女| 国产高清亚洲| 影视先锋久久| 日本视频一区二区| 久久久久免费| 亚洲一区二区三区四区五区午夜 | 欧美男人天堂| 日韩一级精品| 日本视频一区二区| 韩国久久久久久| 视频一区中文字幕| 精品国产亚洲一区二区三区| 丝袜美腿一区二区三区| 福利片在线一区二区| 日韩中文字幕在线一区| 中文字幕系列一区| 18国产精品| 国产亚洲一区在线| 成人美女视频| 国产福利资源一区| 色综合视频一区二区三区日韩 | 91精品一区| 免费观看在线综合| 91久久久精品国产| 精品亚洲美女网站| 成午夜精品一区二区三区软件| 亚洲资源在线| 99国产精品| 欧美在线亚洲| 91精品国产91久久久久久黑人| 久久精品国产免费| 美女尤物国产一区| 热久久久久久| 日韩在线网址| 亚洲v天堂v手机在线| 在线一区二区三区视频| 麻豆精品91| 久久国产精品久久久久久电车| 国产一区二区三区自拍| 日本精品在线中文字幕| 在线看片国产福利你懂的| 日韩av有码| 成人欧美一区二区三区的电影| 日本欧美国产| 日韩欧美二区| 久久精品亚洲人成影院| 日韩欧美精品一区| 婷婷综合激情| 狠狠干成人综合网| 亚洲精品裸体| 欧美国产中文高清| 国产日韩电影| 免费日韩av片| 欧美日本久久| 精品国产中文字幕第一页| 日韩在线中文| 久久国产88| 麻豆国产一区| 成人羞羞视频在线看网址| 国产精品99一区二区| 综合干狼人综合首页| 久草精品视频| 亚洲高清影视| 日本亚洲不卡| 精品欠久久久中文字幕加勒比|