fix:channelFuture练习

上级 e69a5d1e
package com.kwan.shuyu.heima.netty_04_netty.c3_channel;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import lombok.extern.slf4j.Slf4j;
import java.nio.charset.Charset;
/**
* 作用NioEventLoopGroup
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/4/23 10:51
*/
@Slf4j
public class TestEventLoop_01_server {
public static void main(String[] args) {
//普通任务
final EventLoopGroup group = new DefaultEventLoopGroup();
new ServerBootstrap()
//boss 只负责ServerSocketChannel 上 accept 事件 worker只负责socketChannel上的读写
.group(new NioEventLoopGroup(), new NioEventLoopGroup(2))
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) throws Exception {
ch.pipeline().addLast("handler1", new ChannelInboundHandlerAdapter() {
// ByteBuf
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf buf = (ByteBuf) msg;
log.info(buf.toString(Charset.defaultCharset()));
ctx.fireChannelRead(msg);
}
}).addLast(group, "handler2", new ChannelInboundHandlerAdapter() {
// handler2 是一个普通任务
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf buf = (ByteBuf) msg;
log.info(buf.toString(Charset.defaultCharset()));
}
});
}
})
.bind(8080);
}
}
\ No newline at end of file
......@@ -17,7 +17,7 @@ import java.net.InetSocketAddress;
* @version : 2.2.0
* @date : 2023/4/23 16:43
*/
public class TestEventLoop_01_Client {
public class TestEventLoop_02_Client {
public static void main(String[] args) throws InterruptedException {
//1.启动类
final Channel channel = new Bootstrap()
......
......@@ -18,7 +18,7 @@ import java.net.InetSocketAddress;
* @version : 2.2.0
* @date : 2023/4/23 16:43
*/
public class TestEventLoop_02_ChannelFuture {
public class TestEventLoop_03_ChannelFuture {
public static void main(String[] args) throws InterruptedException {
//1.启动类
final ChannelFuture channelFuture = new Bootstrap()
......@@ -35,7 +35,7 @@ public class TestEventLoop_02_ChannelFuture {
})
//连接到服务器
.connect(new InetSocketAddress("localhost", 8080));
channelFuture.sync();
channelFuture.sync();//阻塞住
//获取Channel
final Channel channel = channelFuture.channel();
//发送数据
......
package com.kwan.shuyu.heima.netty_04_netty.c3_channel;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringEncoder;
import lombok.extern.slf4j.Slf4j;
import java.net.InetSocketAddress;
/**
* ChannelFuture
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/4/23 16:43
*/
@Slf4j
public class TestEventLoop_04_ChannelFuture {
public static void main(String[] args) throws InterruptedException {
//1.启动类
final ChannelFuture channelFuture = new Bootstrap()
// 2.添加 EventLoop
.group(new NioEventLoopGroup())
//3.选择客户端channel实现
.channel(NioSocketChannel.class)
// 4.添加处理器
.handler(new ChannelInitializer<NioSocketChannel>() {
@Override //在连接建立后被调用
protected void initChannel(NioSocketChannel ch) throws Exception {
ch.pipeline().addLast(new StringEncoder());
}
})
//连接到服务器
.connect(new InetSocketAddress("localhost", 8080));
channelFuture.addListener((ChannelFutureListener) future -> {
//获取Channel
final Channel channel = future.channel();
log.info("channel={}", channel);
//异步发送数据,连接上才会发送数据
channel.writeAndFlush("hello world");
});
log.info("main end ....");
}
}
\ No newline at end of file
package com.kwan.shuyu.heima.netty_04_netty.c3_channel;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringEncoder;
import lombok.extern.slf4j.Slf4j;
import java.net.InetSocketAddress;
import java.util.Scanner;
/**
* ChannelFuture
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/4/23 16:43
*/
@Slf4j
public class TestEventLoop_05_ChannelFuture {
public static void main(String[] args) throws InterruptedException {
//1.启动类
final ChannelFuture channelFuture = new Bootstrap()
// 2.添加 EventLoop
.group(new NioEventLoopGroup())
//3.选择客户端channel实现
.channel(NioSocketChannel.class)
// 4.添加处理器
.handler(new ChannelInitializer<NioSocketChannel>() {
@Override //在连接建立后被调用
protected void initChannel(NioSocketChannel ch) throws Exception {
ch.pipeline().addLast(new StringEncoder());
}
})
//连接到服务器
.connect(new InetSocketAddress("localhost", 8080));
final Channel channel = channelFuture.sync().channel();
new Thread(() -> {
final Scanner scanner = new Scanner(System.in, "UTF)");
while (true) {
final String line = scanner.nextLine();
if ("q".equals(line)) {
channel.close();
break;
}
channel.writeAndFlush(line);
}
});
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册