Netty 简单样例分析

Netty 是JBoss旗下的io传输的框架,他利用java里面的nio来实现高效,稳定的io传输。

作为io传输,就会有client和server,下面我们看看用netty怎样写client和server

Client:
需要做的事情:

  1. 配置client启动类
    ClientBootstrap bootstrap = new ClientBootstrap(..)

  2. 根据不同的协议或者模式为client启动类设置pipelineFactory。
    这里telnet pipline Factory 在netty中已经存在,所有直接用

bootstrap.setPipelineFactory(new TelnetClientPipelineFactory());

也可以自己定义

bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(
                        new DiscardClientHandler(firstMessageSize));
            }
        });        

这里DiscardClientHandler 就是自己定义的handler,他需要
public class DiscardServerHandler extends SimpleChannelUpstreamHandler 继承SimpleChannelUpstreamHandler 来实现自己的handler。这里DiscardClientHandler
是处理自己的client端的channel,

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    // Server is supposed to send nothing.  Therefore, do nothing.
}

可以看到Discard client不需要接受任何信息

3.连接server

ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));

这里解释一下channelFuture:

在Netty中所有的io操作都是异步的,这也就是意味任何io访问,那么就立即返回处理,并且不能确保
返回的数据全部完成。因此就出现了channelFuture,channelFuture在传输数据时候包括数据和状态两个
部分。他只有Uncompleted和Completed

  •                                  +---------------------------+
    
  •                                  | Completed successfully    |
    
  •                                  +---------------------------+
    
  •                             +---->      isDone() = <b>true</b>      |
    
  • +--------------------------+ | | isSuccess() = <b>true</b> |
  • | Uncompleted | | +===========================+
  • +--------------------------+ | | Completed with failure |
  • | isDone() = <b>false</b> | | +---------------------------+
  • | isSuccess() = false |----+----> isDone() = <b>true</b> |
  • | isCancelled() = false | | | getCause() = <b>non-null</b> |
  • | getCause() = null | | +===========================+
  • +--------------------------+ | | Completed by cancellation |
  •                             |    +---------------------------+
    
  •                             +---->      isDone() = <b>true</b>      |
    
  •                                  | isCancelled() = <b>true</b>      |
    
  •                                  +---------------------------+
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • background netty 是一个异步事件驱动的网络通信层框架,其官方文档的解释为 Netty is a N...
    高级java架构师阅读 3,746评论 0 0
  • 一、Netty概述 Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。 J...
    落地生涯阅读 4,765评论 0 6
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,597评论 0 3
  • 本文基于上一篇Netty Server端实现,以解读源码的方式带领大家理解Server端是如何启动的,主要包括以下...
    0爱上1阅读 3,345评论 0 0
  • 今天早上我和妹妹一起在床上玩了一会,然后我就和妈妈一起去买早点了,出门了的时候,妈妈拿着跳绳,我拿着毽子,下...
    a332095e373c张子龙阅读 1,066评论 0 3