netty 之Hello WordITeye - 亚美娱乐

netty 之Hello WordITeye

2019年04月04日11时48分16秒 | 作者: 迎松 | 标签: 处理,一个,接纳 | 浏览: 155

假如你还不知道Netty是做什么的能做什么。那能够先简略的查找了解一下。我Netty是一个NIO的结构,能够用于开发分布式的Java程序。详细能做什么,各位能够尽量发挥幻想。技能,是服务于人而不是限制住人的。

 

假如你现已万事具备,那么咱们先从一段代码开端。程序员们习气的上手第一步,自然是"Hello world",不过Netty官网的比方却偏偏扔掉了"Hello world"。那咱们就自己写一个最简略的"Hello world"的比方,作为上手。

 

1、首要创立 DiscardServerHandler 服务器端处理音讯类: 

package com.hpgary.netty4;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;
 * netty处理音讯Handler
 * */
public class DiscardServerHandler extends SimpleChannelInboundHandler ByteBuf {
 @Override
 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
 System.out.println("反常");
 @Override
 protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
 /*打印接纳的音讯*/
 System.out.println(msg.toString(CharsetUtil.UTF_8));
 /*由于是网络传输,所以运用directBuffer, 运用 PooledByteBufAllocator ByteBuf池创立*/
 ByteBuf byteBuf = ctx.alloc().directBuffer();
 byteBuf.writeBytes("I got message\n".getBytes());
 ctx.writeAndFlush(byteBuf);
 @Override
 public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
 super.channelReadComplete(ctx);
 @Override
 public void channelInactive(ChannelHandlerContext ctx) throws Exception {
 super.channelInactive(ctx);
 ctx.writeAndFlush("welcome\n");
 @Override
 public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {

 2、创立发动类:

package com.hpgary.netty4;
import java.net.InetAddress;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
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.Delimiters;
public class DiscardServer {
 public static void main(String[] args) throws Exception {
 EventLoopGroup bossGroup = new NioEventLoopGroup();
 EventLoopGroup workerGroup = new NioEventLoopGroup();
 ServerBootstrap b = new ServerBootstrap();
 * 这一步是有必要的,假如没有设置group将会报java.lang.IllegalStateException: group not
 * set反常
 b.group(bossGroup, workerGroup);
 * ServerSocketChannel以NIO的selector为根底进行完成的,用来接纳新的衔接
 * 这儿通知Channel怎么获取新的衔接.
 b.channel(NioServerSocketChannel.class);
 /***
 * 这儿的事情处理类经常会被用来处理一个最近的现已接纳的Channel。
 * ChannelInitializer是一个特别的处理类,
 * 他的意图是协助运用者装备一个新的Channel。
 * 或许你想经过添加一些处理类比方NettyServerHandler来装备一个新的Channel
 * 或许其对应的ChannelPipeline来完成你的网络程序。
 * 当你的程序变的杂乱时,或许你会添加更多的处理类到pipline上,
 * 然后提取这些匿名类到最顶层的类上。
 b.childHandler(new ChannelInitializer SocketChannel () {
 @Override
 protected void initChannel(SocketChannel ch) throws Exception {
 ChannelPipeline pipeline = ch.pipeline();
 pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
 /*假如是传递和接纳的是String字符串,就需要装备解压和压缩工具*/
 // pipeline.addLast("decoder", new StringDecoder());
 // pipeline.addLast("encoder", new StringEncoder());
 /*装备接纳数据的handler*/
 pipeline.addLast("handler", new DiscardServerHandler());
 /*服务器端兵丁IP和端口,0.0.0.0表明任何IP都能够链接*/
 ChannelFuture future = b.bind(InetAddress.getByName("0.0.0.0"), 8086).sync();
 future.channel().closeFuture().sync();

 

3、创立客户端处理数据handler

package com.hpgary.netty4;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;
public class DiscardClientHandler extends SimpleChannelInboundHandler ByteBuf {
 @Override
 protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
 System.out.println(msg.toString(CharsetUtil.UTF_8));

 4、客户端发动程序

package com.hpgary.netty4;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.commons.lang3.StringUtils;
import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.Delimiters;
public class DiscardClient {
 public static void main(String[] args) throws Exception {
 EventLoopGroup workerGroup = new NioEventLoopGroup();
 Bootstrap b = new Bootstrap();
 b.group(workerGroup);
 b.channel(NioSocketChannel.class);
 b.handler(new ChannelInitializer SocketChannel () {
 @Override
 public void initChannel(SocketChannel ch) throws Exception {
 ChannelPipeline pipeline = ch.pipeline();
 pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
 pipeline.addLast("handler", new DiscardClientHandler());
 Channel ch = b.connect("127.0.0.1", 8086).sync().channel();
 BufferedReader in = new BufferedReader(new InputStreamReader(System.in) ) ;
 while (true) {
 String line = in.readLine();
 if (line  null) {
 continue;
 ByteBuf buf = Unpooled.directBuffer(128);
 buf.writeBytes((line + StringUtils.LF).getBytes());
 ch.writeAndFlush(buf);

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    netty 之Hello WordITeye

    处理,一个,接纳
  • 2

    java有值类型吗ITeye

    类型,引证,指向
  • 3

    内置jetty(转)ITeye

    一个,处理,运用
  • 4
  • 5

    spring aopITeye

    署理,结构,调用
  • 6
  • 7

    Shell 练习题(append)ITeye

    实例,文件,上述
  • 8

    获取checkbox复选框的值ITeye

    依据,获取,拿到
  • 9

    Redis的耐久化机制ITeye

    耐久,方法,内存
  • 10