Netty3.x用户指南翻译(1)

5 篇文章 0 订阅
2 篇文章 0 订阅

第一章:开始

这一章教程,使用简单的例子让你快速了解Netty的架构。当你读完这一章,你可以在Netty基础之上,写一个客户端和服务端。

1. 开始之前

能运行这一章实例的最小要求有两个:①,JDK 1.5以上,②,Netty版本3.7(因为我是翻译的3.7版本的用户指南)。

当你确定了,你对这一章的内容中的类可能还有更多的问题。如果想知道更多关于这些类的消息,请查询API.

为了你的便利所有的类都会在在线API文档中有链接。另外如果在接触Netty过程中遇到某些疑问,请访问Netty社区让我们知道任何不正确,错误程序或者印刷。如果您有什么好的观点主意也可以链接我们。

2. 写一个Discard Server

世界上最简单的协议不是Hello World 是 DISCARD ,这个DISCARD协议接收数据,但是没有任何响应(response)

实现DISCARD 协议,你唯一要做的是忽略所有的接收到的数据,让我们直接实现handler接口,这些Netty为事件提供了handler I/O接口方法。

  1 package org.jboss.netty.example.discard;
  2 
    public class DiscardServerHandler extends SimpleChannelHandler {
  4 
        @Override
  6     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
        }
  8 
        @Override
 10     public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
            e.getCause().printStackTrace();
 12         
            Channel ch = e.getChannel();
 14         ch.close();
        }
 16 }


DiscardServerHandler 继承 SimpleChannelHandler ,他是一个 ChannelHandler  的实现类  

SimpleChannelHandler 提供了各种 你可以重写的处理方法。目前,继承SimpleChannelHandler 是足够的,而不是实现自己实现接口。

我们重写 messageReceive 事件方法,这个方法被被一个MessageEvent事件触发调用,这个方法包含从客户端接受到的数据,在该例子中,我们忽视接受到的数据,并不对数据做任何处理。

exceptionCaught 事件方法,这个方法是当I/O错误,或者在处理过程中抛出异常的时候被调用。在大多数情况下,扑捉异常应该是停止的,并且他所关联的通道应该是关闭的。尽管这个方法的实现能被用到你想要处理不同的异常情景。例如,在关闭链接之前你想发送一个用一个错误码响应消息。


目前,挺好。我们已经把一个DISCARD服务的实现了一半。现在剩下的是写一个main方法用DiscardServerHandler来启动服务。

1 package org.jboss.netty.example.discard;
  2 
    import java.net.InetSocketAddress;
  4 import java.util.concurrent.Executors;
    
  6 public class DiscardServer {
    
  8     public static void main(String[] args) throws Exception {
            ChannelFactory factory =
 10             new NioServerSocketChannelFactory(
                        Executors.newCachedThreadPool(),
 12                     Executors.newCachedThreadPool());
    
 14         ServerBootstrap bootstrap = new ServerBootstrap5(factory);
    
 16         bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
                public ChannelPipeline getPipeline() {
 18                 return Channels.pipeline(new DiscardServerHandler());
                }
 20         });
    
 22         bootstrap.setOption("child.tcpNoDelay", true);
            bootstrap.setOption("child.keepAlive", true);
 24 
            bootstrap.bind(new InetSocketAddress(8080));
 26     }
    }




第一次翻译,不是很好。。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值