Netty
- ChannelEvent 某一事件
- ChannelPipeline 管道、传输途径。控制ChannelEvent事件传递和分发
- ChannelHandler 站点处理业务逻辑
- Channel 协调总部门
- EventLoopGroup 线程池调度处理各种数据
DEMO
Server
public class DemoServer {
private static final int port = 8888;
public static void main(String[] args) throws Exception {
EventLoopGroup mainGroup = new NioEventLoopGroup();
EventLoopGroup workGroup = new NioEventLoopGroup();
try{
ServerBootstrap boot = new ServerBootStrap();
//主从Reactor多线程模型
boot.group(mainGroup, workGroup);
//NIO传输
boot.channel(NioServerSocketChannel.class);
//handler处理流程
boot.childHandler(new DemoServerInitializer());
ChannelFuture f = boot.bind(port).sync();
f.channel().closeFuture().sync();
}finally{
mainGroup.shutdownGracefully();
workGroup.shutdownGracefully();
}
}
}
public class DemoServerInitializer extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
//获取pipeline
ChannelPipeline pipeline = socketChannel.pipeline);
//解码器
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8000,Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encode", new StringEncode());
pipeline.addLast("handler", new DemoHandler());
}
}
public classDemoHandler extends SimpleChannelInboundHandler<String> {
@Override
portected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
System.out.println(ctx.channel().remoteAddress() + "Msg:" + msg);
ctx.writeAndFlush("succ get msg \n");
}
//建立链接时触发
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
ctx.write("welcome to netty \n");
ctx.flush();
super.channelActive(ctx);
}
}
client端
public class DemoClient{
public static final String host = "127.0.0.1";
public static final String port = 8888;
public staic void main(String[] args) throws Exception {
EventLoopGroup group = new NioEventLoopGroup();
try{
BootStrap boot = new BootStrap();
boot.group(group).channel(NioSocketChannel.class).handler(new DemoClientInitializer());
Channel channel = b.connect(host, port).sync().channel();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
for(;;) {
String line = in.readLine();
if(line == null) {
continue;
}
channel.writeAndFulsh(line + "\r\n");
}
}finally {
group.shutdownGracefully();
}
}
}
public class DemoClientInitializer extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline);
//解码器
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8000,Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encode", new StringEncode());
pipeline.addLast("handler", new DemoClientHandler());
}
}
public class DemoClientHandler extends SimpleChannelInboundHanlder<String> {
//接收服务端的信息
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, String s) throws Exception {
System.out.println("Server msg : " + s);
}
//连接成功时触发
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("Client connect ");
super.channelActive(ctx);
}
//关闭时触发
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
System.out.println("Client close ");
super.channelInactive(ctx);
}
}
原文地址:http://www.cnblogs.com/codechange/p/16836139.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性