`
stephen830
  • 浏览: 3010161 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Netty实例-简单的服务端-客户端实现,注释详细

 
阅读更多

 

Netty实例-简单的服务端-客户端实现,注释详细

 原文  http://blog.csdn.net/jiangtao_st/article/details/38116593

 

1.Netty Server端实现

/**
 * 
 * <p>
 * 	Netty Server Simple
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月7日
 * @version: V1.0
 */

public class NettyServer {
  
  private final int port = 8989;
  
  @Test
  public void nettyServer(){
    
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    
    try {
      ServerBootstrap serverBootstrap = new ServerBootstrap();
      serverBootstrap.group(bossGroup,workerGroup)
        .channel(NioServerSocketChannel.class)
        .option(ChannelOption.SO_BACKLOG, 1024)
        .childHandler(new ChildChannelHandler());
      
      //绑定端口、同步等待
      ChannelFuture futrue = serverBootstrap.bind(port).sync();
      
      //等待服务监听端口关闭
      futrue.channel().closeFuture().sync();
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally{
      //退出,释放线程等相关资源
      bossGroup.shutdownGracefully();
      workerGroup.shutdownGracefully();
    }

    
  }

  private class ChildChannelHandler extends ChannelInitializer<SocketChannel>{
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {

      ch.pipeline().addLast(new SimpleServerHandler());
    }
  }
  
}

 

2.Netty Client 实现

/**
 * 
 * <p>
 * 	NettyClient  实现
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月7日
 * @version: V1.0
 */
public class NettyClient {

  
  
  public void connect(int port,String host){
    
    EventLoopGroup group = new NioEventLoopGroup();
    
    try {
      Bootstrap bootstrap = new Bootstrap();
      bootstrap.group(group)
      .channel(NioSocketChannel.class)
      .option(ChannelOption.TCP_NODELAY, true)
      .handler(new ChannelInitializer<SocketChannel>() {

        @Override
        protected void initChannel(SocketChannel ch) throws Exception {
          ch.pipeline().addLast(new SimpleClientHandler());
        }
      });
      //发起异步链接操作
      ChannelFuture channelFuture = bootstrap.connect(host, port).sync();
      
      channelFuture.channel().closeFuture().sync();
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally{
      //关闭,释放线程资源
      group.shutdownGracefully();
    }
  }
  
  @Test
  public void nettyClient(){
    
    new NettyClient().connect(8989, "localhost");
  }
  
}

 

3.ServerHander 处理程序

/**
 * 
 * <p>
 * 	Server接收消息处理Handler
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月7日
 * @version: V1.0
 */
public class SimpleServerHandler extends ChannelInboundHandlerAdapter {

  @Override
  public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

    ByteBuf buf = (ByteBuf)msg;
    byte [] req = new byte[buf.readableBytes()];
    
    buf.readBytes(req);
    
    String message = new String(req,"UTF-8");
    
    System.out.println("Netty-Server:Receive Message,"+ message);
  
  }
}

 

4.ClientHander 处理程序

/**
 * 
 * <p>
 * Client Handler
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月7日
 * @version: V1.0
 */
public class SimpleClientHandler extends ChannelInboundHandlerAdapter {
  
  private ByteBuf clientMessage;
  

  public SimpleClientHandler() {
    
    byte [] req = "Call-User-Service".getBytes();
    clientMessage = Unpooled.buffer(req.length);
    clientMessage.writeBytes(req);
  }

  @Override
  public void channelActive(ChannelHandlerContext ctx) throws Exception {
    
    ctx.writeAndFlush(clientMessage);
    
  }

  @Override
  public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    ByteBuf buf = (ByteBuf)msg;
    byte [] req = new byte[buf.readableBytes()];
    
    buf.readBytes(req);
    
    String message = new String(req,"UTF-8");
    
    System.out.println("Netty-Client:Receive Message,"+ message);
  }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

    ctx.close();
  }
}

 

 

 

 

 

 

 

 

 

分享到:
评论
2 楼 用户5906561952 2016-08-25  
1 楼 用户5906561952 2016-08-25  

相关推荐

    Spring+Netty+WebSocket实例

    本实例将详细探讨如何利用这三种技术进行集成,实现高效的双向通信。 首先,Spring框架是Java领域最流行的后端开发框架之一,它提供了丰富的功能和强大的依赖注入机制。在WebSocket方面,Spring提供了一个名为`...

    在 Java 上实现的 Socket.IO 服务器 实时java框架

    该项目是Socket.IO服务器的开源 Java 实现。基于Netty服务器框架。 根据 Apache License 2.0 获得许可。 支持1.x - 4.x版本的Socket.IO 客户端 支持 xhr 轮询传输 支持websocket传输 支持命名空间和房间 支持ack...

    Netty-ProtoBuffer整合实例

    这是一个由本人自己编写的Netty与ProtoBuffer整合在一起的小实例,代码注释很详细,比较适合初学者学习,附带着Netty和ProBuffer有关的最新的jar包,希望对你有所帮助,具体功能是当客户端与服务器端建立连接时,...

    JavaNetty.rar 消息通信 补充了很多注释

    "EchoClient.rar" 和 "EchoServer.rar" 可能是两个核心部分,分别代表了Netty中的回声服务端和客户端。 Netty的核心概念之一是它的异步I/O模型,它基于NIO(非阻塞I/O)构建,使得在处理大量并发连接时表现出色。...

    scoket客户端 服务端.zip

    这个示例中的详细注释将帮助初学者理解每个部分的作用,包括如何初始化Socket,如何建立连接,如何处理输入输出流,以及如何在WinForm界面中显示和发送消息。通过实际操作和学习此代码,开发者可以掌握Socket通信的...

    基于Java Netty 实现的多人联机游戏(多人对战)的客户端和服务器端.zip

    《基于Java Netty实现的多人联机游戏:客户端与服务器端详解》 在现代的网络游戏开发中,实时性、稳定性和高效性是至关重要的因素,而Java Netty框架以其高性能、易用性和灵活性,成为了构建网络应用的理想选择。本...

    nettyWebSocket

    在这个实例中,注释可以帮助我们快速掌握Spring、Netty和WebSocket的整合方式。 综上所述,"NettyWebSocket"项目是一个集成了Spring和Netty的WebSocket实例,具备良好的通用性和生产适用性,对于想要学习WebSocket...

    netty网络框架,封装 http,tcp,udp的例子

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个框架广泛应用于大数据、云计算以及分布式系统等领域。在这个例子中,我们将探讨如何利用 Netty 封装 HTTP...

    Java高手真经(网络开发卷)源码

    - Netty框架:高性能的异步事件驱动网络应用框架,可能用于构建高效的网络应用服务器。 6. **性能优化与调试** - 网络延迟优化:源码可能包含如何减少网络延迟,提高网络通信效率的策略。 - 错误处理与日志记录...

    wait-side-car-源码.rar

    例如, Ribbon 或者 OpenFeign 可能被用来实现客户端的负载均衡,根据特定策略选择后端服务实例。 5. **日志与监控** 为了保证系统的稳定运行,"wait-side-car"可能会集成日志框架如Log4j或Logback,以及监控工具...

    数控注册表

    在学习了SpringCloud的各个组件的使用以及研究过相关的原始后,为了更好地理解其内部实现原理,模仿了nacos的部分设计思想,自己实现了该注册中心,代码量4000+,代码中有详细的注释,使用netty实现了服务注册,服务...

    深入探索RocketMQ源码:透视消息中间件的内核机制

    普通发送者通过Netty客户端向Broker发送消息,而事务消息发送者需要提供Netty服务端,以供Broker回查本地事务状态。消费者则有推模式和拉模式,消费者组的负载均衡是通过消费者实例的分配策略实现的。 延迟消息是...

    java学习资料汇总

    最后,Javadoc是Java的文档生成工具,通过在源代码中添加特殊的注释,Javadoc可以自动生成格式化的API文档,帮助开发者理解和使用代码。 总的来说,Java学习资料汇总覆盖了从基础语法、面向对象编程、GUI开发、异常...

    study-demo:Java学习案例

    每个例子都应有详细的注释,帮助读者理解代码的运行逻辑和目的。 2. **虚拟机**: Java虚拟机(JVM)是Java程序执行的平台。学习JVM的工作原理对于优化Java应用性能至关重要。这部分可能会讲解JVM内存模型(堆、栈...

Global site tag (gtag.js) - Google Analytics