Netty(二) 實現簡單Http伺服器
--------使用Netty簡單的實現Http伺服器
Netty相關元件可以去看我的上一篇部落格 Netty(一) 裡面有介紹
服務端:
/**
* @Author Joker
* @Date 2020/11/13
* @since 1.8
*/
public class HttpServerDemo {
public static void main(String[] args) {
// 建立主從
EventLoopGroup masterEventLoopGroup = new NioEventLoopGroup();
EventLoopGroup slaveEventLoopGroup = new NioEventLoopGroup();
// 建立服務啟動類
ServerBootstrap bootstrap = new ServerBootstrap();
// 繫結主從模式
bootstrap.group(masterEventLoopGroup, slaveEventLoopGroup);
// 繫結通道
bootstrap.channel(NioServerSocketChannel.class);
bootstrap.childHandler(new ChannelInitializer() {
@Override
protected void initChannel(Channel channel) throws Exception {
ChannelPipeline pipeline = channel.pipeline();
// 新增Http編碼器,該解碼器會將字串轉成HttpRequest
pipeline.addLast(new HttpServerCodec());
// 將編碼器HttpRequest轉成FullHttpRequest物件
pipeline.addLast(new HttpObjectAggregator(1024 * 1024));
pipeline.addLast(new HttpChannelHandler());
}
});
ChannelFuture bind = bootstrap.bind("127.0.0.1", 8888);
try {
bind.sync();
System.out.println("服務啟動成功");
bind.channel().closeFuture().sync();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
masterEventLoopGroup.shutdownGracefully();
slaveEventLoopGroup.shutdownGracefully();
}
}
}
Http訊息處理器
/**
* @Author Joker
* @Date 2020/11/14
* @since 1.8
*/
public class HttpChannelHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, FullHttpRequest fullHttpRequest) throws Exception {
String name = fullHttpRequest.method().name();
System.out.println("請求方法: " + name);
HttpHeaders headers = fullHttpRequest.headers();
List<Map.Entry<String, String>> entries = headers.entries();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
String con = fullHttpRequest.content().toString(Charset.defaultCharset());
System.out.println("內容: " + con);
// 相應頁面,設定相應資訊
String respMsg = "<html>Hello World</html>";
DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
response.headers().add("context-type", "text/html;charset=utf-8");
response.content().writeBytes(respMsg.getBytes("UTF-8"));
channelHandlerContext.writeAndFlush(response);
}
執行服務端,可以通過網頁訪問地址
我們的訊息處理器就會把我們請求的相關資訊列印出來...
好啦,這就是一個使用Netty簡單實現的Http伺服器
相關文章
- Netty實現Http高效能伺服器NettyHTTP伺服器
- netty 實現簡單的rpc呼叫NettyRPC
- netty系列之:使用netty實現支援http2的伺服器NettyHTTP伺服器
- Java使用Netty實現簡單的RPCJavaNettyRPC
- tcp 實現簡單http 問題TCPHTTP
- 簡單的Java實現Netty進行通訊JavaNetty
- 自己用 Netty 實現一個簡單的 RPCNettyRPC
- Netty、MINA、Twisted一起學系列01:實現簡單的TCP伺服器NettyTCP伺服器
- netty系列之:netty實現http2中的流控制NettyHTTP
- PHP 實現 HTTP 表單請求伺服器PHPHTTP伺服器
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- netty寫一個http伺服器NettyHTTP伺服器
- 使用Netty和動態代理實現一個簡單的RPCNettyRPC
- 使用Python建立簡單的HTTP伺服器PythonHTTP伺服器
- 使用Netty實現HTTP2伺服器/客戶端的原始碼和教程 - BaeldungNettyHTTP伺服器客戶端原始碼
- 實現簡單元件到部署伺服器——react元件伺服器React
- Netty整合SpringMVC,實現高效的HTTP服務請求NettySpringMVCHTTP
- 簡單的零配置命令http伺服器:http-server入門HTTP伺服器Server
- Android應用加固的簡單實現方案(二)Android
- JavaScript實現簡單二叉查詢樹JavaScript
- 在 Golang 中實現一個簡單的Http中介軟體GolangHTTP
- Python 臨時啟動簡單的 HTTP 伺服器PythonHTTP伺服器
- 從零開始實現簡單 RPC 框架 6:網路通訊之 NettyRPC框架Netty
- Golang如何實現HTTP代理伺服器GolangHTTP伺服器
- Netty版本 簡單聊天室Netty
- 簡單簡易實現伺服器遠端登陸傳送簡訊提示伺服器
- AspectJ簡單實現
- FastClick簡單實現AST
- Promise 簡單實現Promise
- ReadableStream 簡單實現
- Express 簡單實現Express
- Nodejs快速搭建簡單的HTTP伺服器詳細教程。NodeJSHTTP伺服器
- 標準庫 http 包的簡單實用HTTP
- netty系列之:搭建HTTP上傳檔案伺服器NettyHTTP伺服器
- 簡單的低開編輯器(二):實現元件拖拽元件
- Flutter簡單實現手寫瀑布流 第二篇Flutter
- 簡單彈幕第二彈(c3animate實現)
- 使用 Java 11 HTTP Client API 實現 HTTP/2 伺服器推送JavaHTTPclientAPI伺服器