netty簡單筆記

Serverjava

package com.netty;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

public class Server {

	public static void main(String[] args) throws Exception {
		
		//1.第一個線程是用於接收client鏈接的
		EventLoopGroup bossGroup = new NioEventLoopGroup();
		
		//2.第二個線程是用於實際的業務處理操做的
		EventLoopGroup workGroup = new NioEventLoopGroup();
		
		ServerBootstrap b = new ServerBootstrap();
		
		b.group(bossGroup, workGroup).
			channel(NioServerSocketChannel.class)
			.childHandler(new ChannelInitializer<SocketChannel>() {

				@Override
				protected void initChannel(SocketChannel sc) throws Exception {
					
					ByteBuf buf = Unpooled.copiedBuffer("$_".getBytes());
					sc.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, buf));   //分隔符
					sc.pipeline().addLast(new StringDecoder());//發送string類型
					sc.pipeline().addLast(new ServerHandler());
				}
			})
			.option(ChannelOption.SO_KEEPALIVE, true);
		
		ChannelFuture f = b.bind(1234).sync();
		
		f.channel().closeFuture().sync();
 
		bossGroup.shutdownGracefully();
		workGroup.shutdownGracefully();
	}
}

 

 

ServerHandlerbootstrap

package com.netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.ReferenceCountUtil;

public class ServerHandler extends ChannelHandlerAdapter {

	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
		try {
			/*ByteBuf buf = (ByteBuf) msg;
			byte[] data = new byte[buf.readableBytes()];
			buf.readBytes(data);
			String request = new String(data,"utf-8");
			System.out.println(request);*/
			
			System.out.println("--------->"+msg);
			
			String response = "Hi Client";
			ctx.writeAndFlush(Unpooled.copiedBuffer(response.getBytes()));
			
		} finally {
			ReferenceCountUtil.release(msg);
		}
	}
	
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
		// TODO Auto-generated method stub
		super.exceptionCaught(ctx, cause);
	}
}

 

 

Clientsocket

package com.netty;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;

public class Client {

	public static void main(String[] args) throws Exception {
		
		EventLoopGroup group = new NioEventLoopGroup();
		
		Bootstrap b = new Bootstrap();
		
		b.group(group)
		.channel(NioSocketChannel.class)
		.handler(new ChannelInitializer<SocketChannel>() {

			@Override
			protected void initChannel(SocketChannel sc) throws Exception {
				sc.pipeline().addLast(new ClientHandler());
			}
		});
		
		ChannelFuture f = b.connect("127.0.0.1", 1234).sync();
		
		f.channel().write(Unpooled.copiedBuffer("hello word$_".getBytes()));
		f.channel().write(Unpooled.copiedBuffer("hello word$_".getBytes()));
		f.channel().write(Unpooled.copiedBuffer("hello word$_".getBytes()));
		
		f.channel().flush();
		
		
		f.channel().closeFuture().sync();
		group.shutdownGracefully();
		
	}
}

 

 

ClientHandleride

package com.netty;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;

public class ClientHandler extends ChannelHandlerAdapter {

	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
		ByteBuf buf = (ByteBuf) msg;
		byte[] data = new byte[buf.readableBytes()];
		buf.readBytes(data);
		String request = new String(data,"utf-8");
		System.out.println(request);
	}
	
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
		// TODO Auto-generated method stub
		super.exceptionCaught(ctx, cause);
	}
}
相關文章
相關標籤/搜索