Netty5 入門HelloWorld
Netty5 入門HelloWorld
一、客戶端程式碼及關鍵類說明
1 /**
2 * netty5的客戶端
3 * @author -zhengzx-
4 *
5 */
6 public class ClientSocket {
7
8 public static void main(String[] args) {
9 //服務類
10 Bootstrap bootstrap = new Bootstrap();
11 //worker
12 EventLoopGroup worker = new NioEventLoopGroup();
13
14 try {
15 //設定執行緒池
16 bootstrap.group(worker);
17 //設定socket工廠
18 bootstrap.channel(NioSocketChannel.class);
19 //設定管道
20 bootstrap.handler(new ChannelInitializer<Channel>() {
21
22 @Override
23 protected void initChannel(Channel ch) throws Exception {
24 ch.pipeline().addLast(new StringDecoder());
25 ch.pipeline().addLast(new StringEncoder());
26 ch.pipeline().addLast(new ClientSocketHandler());
27 }
28 });
29
30 ChannelFuture connect = bootstrap.connect("127.0.0.1", 10101);
31
32 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
33 while(true){
34 System.out.println("請輸入:");
35 String msg = bufferedReader.readLine();
36 connect.channel().writeAndFlush(msg);
37 }
38
39 } catch (Exception e) {
40 e.printStackTrace();
41 } finally{
42 worker.shutdownGracefully();
43 }
44 }
45 }
【1】**EventLoopGroup:**`客服端需要指定 EvnetLoopGroup,Netty5 中例項為 NioEventLoopGroup:表示一個 NIO 的EvnetLoopGroup。
`【2】**ChannelType:**`指定 Channel 的型別,客戶端為 NioSocketChannel。在 Netty 中,,Channel 是一個 Socket 的抽象,它為使用者提供了關於 Socket 狀態(是否連線還是斷開) 以及對 Socket 的讀寫等操作。每當 Netty 建立了一個連線後, 都會有一個對應的 Channel 例項。
`【3】**Handler:**設定資料的處理類。
1 public class ClientSocketHandler extends SimpleChannelInboundHandler<String>{
2
3 @Override
4 protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {
5 System.out.println("客戶端接受訊息:"+msg);
6 }
7 }
【4】**ChannelPipeline:**在例項化一個 Channel 時,必然伴隨著例項化一個 ChannelPipeline。
二、服務端程式碼及說明
【1】**EventLoopGroup:**不論是伺服器端還是客戶端,都必須指定 EventLoopGroup. 在這個例子中, 指定了NioEventLoopGroup, 表示一個 NIO 的 EventLoopGroup, 不過伺服器端需要指定兩個 EventLoopGroup, 一個是 bossGroup, 用於處理客戶端的連線請求; 另一個是 workerGroup, 用於處理與各個客戶端連線的 IO 操作。
【2】**ChannelType:**指定 Channel 的型別. 因為是伺服器端, 因此使用了 NioServerSocketChannel。
【3】**Handler:**設定資料的處理器。
1 public class ServerSocketHandler extends SimpleChannelInboundHandler<String>{
2
3 @Override
4 protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {
5 System.out.println(msg);
6 //返回字串
7 ctx.writeAndFlush("hi");
8 }
9
10 }
相關文章
- React入門-1.helloworldReact
- 入門Semantic Kernel:OneApi整合與HelloWorldAPI
- SpringBoot入門(一):從HelloWorld開始Spring Boot
- golang 快速入門 [3]-go 語言 helloworldGolang
- go語言入門教程分享:第一個程式:HelloWorldGo
- 一、Flutter初始入門構建window環境,並且執行helloWorldFlutter
- Helloworld 驅動模組載入
- IOS 初級開發入門教程(二)第一個HelloWorld工程及StoryBoard使用iOS
- helloworld
- FASM之HelloWorldASM
- Servlet-HelloWorldServlet
- dubbo-HelloWorld
- (原創)【B4A】一步一步入門01:簡介、開發環境搭建、HelloWorld開發環境
- 入門入門入門 MySQL命名行MySql
- Flutter系列(四)——HelloWorldFlutter
- 何入CTF的“門”?——所謂入門就是入門
- 如何入CTF的“門”?——所謂入門就是入門
- scala 從入門到入門+
- makefile從入門到入門
- gRPC(二)入門:Protobuf入門RPC
- Parcel 打包示例 – React HelloWorldReact
- redis整合springboot的helloworldRedisSpring Boot
- 彙編程式碼Helloworld
- 從 HelloWorld 說開去
- 【小入門】react極簡入門React
- Android入門教程 | RecyclerView使用入門AndroidView
- netty 之 telnet HelloWorld 詳解Netty
- 學習Source Generators之HelloWorld
- django新增路由訪問helloworldDjango路由
- Flask之 安裝與HelloWorldFlask
- RabbitMQ學習筆記-HelloWorldMQ筆記
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | Kotlin協程入門AndroidKotlin
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- MyBatis從入門到精通(一):MyBatis入門MyBatis
- Go語言學習(2) - HelloWorldGo
- 機器語言編寫helloworld
- 用eclipes寫第一個HelloWorld