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實現Http高效能伺服器NettyHTTP伺服器
- netty系列之:使用netty實現支援http2的伺服器NettyHTTP伺服器
- C#實現一個最簡單的HTTP伺服器C#HTTP伺服器
- netty 實現簡單的rpc呼叫NettyRPC
- tcp 實現簡單http 問題TCPHTTP
- Python的學習(十四)---- 實現簡單的HTTP伺服器PythonHTTP伺服器
- Java使用Netty實現簡單的RPCJavaNettyRPC
- 用原生http 實現簡單 Express 框架HTTPExpress框架
- 簡單的Java實現Netty進行通訊JavaNetty
- 用python或者perl實現簡單的http伺服器目錄共享PythonHTTP伺服器
- PHP 實現 HTTP 表單請求伺服器PHPHTTP伺服器
- 簡單實現二次注入
- Netty、MINA、Twisted一起學系列01:實現簡單的TCP伺服器NettyTCP伺服器
- 自己用 Netty 實現一個簡單的 RPCNettyRPC
- netty系列之:netty實現http2中的流控制NettyHTTP
- netty寫一個http伺服器NettyHTTP伺服器
- javascript實現二維陣列實現簡單介紹JavaScript陣列
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- MessagePack 序列化框架在netty中的簡單實現。框架Netty
- 實現簡單元件到部署伺服器——react元件伺服器React
- 最簡單的web伺服器實現(一)Web伺服器
- 一個用C#實現的簡單http server (轉)C#HTTPServer
- Kafka 簡單實驗二(Python實現簡單生產者消費者)KafkaPython
- 使用Netty實現HTTP2伺服器/客戶端的原始碼和教程 - BaeldungNettyHTTP伺服器客戶端原始碼
- 使用Python建立簡單的HTTP伺服器PythonHTTP伺服器
- SimpleHTTPServer ——一個簡單的HTTP伺服器HTTPServer伺服器
- 簡單實用的《http小書》HTTP
- 使用Netty和動態代理實現一個簡單的RPCNettyRPC
- 《圖解HTTP》讀書筆記二:簡單的 HTTP 協議圖解HTTP筆記協議
- 《圖解HTTP》學習筆記(二):簡單的HTTP協議圖解HTTP筆記協議
- 簡單的零配置命令http伺服器:http-server入門HTTP伺服器Server
- JavaScript實現簡單二叉查詢樹JavaScript
- UICollectionView(二)實現一個最簡單的UICollectionViewUIView
- 實現一個簡單的FTP伺服器(十四)FTP伺服器
- 在 Golang 中實現一個簡單的Http中介軟體GolangHTTP
- Golang如何實現HTTP代理伺服器GolangHTTP伺服器
- Android應用加固的簡單實現方案(二)Android