Netty系列之一开始使用

Netty是用来做什么的呢,我的理解是它是一个网络开发框架,利用它能很快速方便的开发出高性能的服务端和客户端。刚开始学习java的时候你一定接触过怎么利用socket去实现服务端和客户端,后来java出了NIO这一大利器极大提供了网络程序的性能,但是NIO是基于事件驱动的模型,理解起来比常用的套接字编程要难一点,但是无论是利用NIO还是原始的socket编程从0开始编写一个服务端或是客户端实在是太困难了。Netty就是帮助你去解决这样的问题的,废话不多说先简单介绍一个例子,我们要写一个服务端绑定端口号后,等待客户端的连接,客户端连接后打印一句欢迎语句,然后客户端输入什么,服务端打印出来,并且返回给客户端输出,利用netty实现如下

 1 public class Server {
 2 
 3     private ServerBootstrap serverBootstrap;
 4 
 5     private int port;
 6 
 7     public Server(int port) {
 8         this.port = port;
 9         serverBootstrap = new ServerBootstrap(
10                 new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),
11                         Executors.newCachedThreadPool()));
12         serverBootstrap.setPipelineFactory(new ChannelPipelineFactory() {
13             public ChannelPipeline getPipeline() throws Exception {
14                 ChannelPipeline channelPipeline = Channels.pipeline();
15                 channelPipeline.addLast("decoder", new StringDecoder());
16                 channelPipeline.addLast("encoder", new StringEncoder());
17                 channelPipeline.addLast("serverHandler", new ServerHandler());
18                 return channelPipeline;
19             }
20         });
21         serverBootstrap.bind(new InetSocketAddress(this.port));
22     }
23 
24 
25     private class ServerHandler extends SimpleChannelUpstreamHandler {
26         @Override
27         public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
28             if(e.getMessage() instanceof String) {
29                 String message = (String) e.getMessage();
30                 System.out.println("Client Send:" + message);
31                 e.getChannel().write("Server receive:" + message);
32             }
33         }
34 
35         @Override
36         public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
37             System.out.println("A client connected to this server");
38             System.out.println("Client:" + e.getChannel().getRemoteAddress());
39             e.getChannel().write("******************************\r\n");
40             e.getChannel().write("Welcome to connect this server\r\n");
41             e.getChannel().write("******************************\r\n");
42         }
43     }
44 
45     public static void main(String args[]) {
46         new Server(9999);
47     }
48 }

 

posted on 2016-05-12 23:38  capsule  阅读(303)  评论(0编辑  收藏  举报

导航