文档章节

转 Java NIO框架Netty教程(一) – Hello Netty

DEC_LIU
 DEC_LIU
发布于 2015/02/06 23:02
字数 705
阅读 106
收藏 0

先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。

如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world"。那我们就自己写一个最简单的"Hello world"的例子,作为上手。

 

  1. /** 

  2.  * Netty 服务端代码 

  3.  *  

  4.  * @author lihzh 

  5.  * @alia OneCoder 

  6.  * @blog http://www.coderli.com 

  7.  */  

  8. public class HelloServer {  

  9.   

  10.     public static void main(String args[]) {  

  11.         // Server服务启动器  

  12.         ServerBootstrap bootstrap = new ServerBootstrap(  

  13.                 new NioServerSocketChannelFactory(  

  14.                         Executors.newCachedThreadPool(),  

  15.                         Executors.newCachedThreadPool()));  

  16.         // 设置一个处理客户端消息和各种消息事件的类(Handler)  

  17.         bootstrap  

  18.                 .setPipelineFactory(new ChannelPipelineFactory() {  

  19.                     @Override  

  20.                     public ChannelPipeline getPipeline()  

  21.                             throws Exception {  

  22.                         return Channels  

  23.                                 .pipeline(new HelloServerHandler());  

  24.                     }  

  25.                 });  

  26.         // 开放8000端口供客户端访问。  

  27.         bootstrap.bind(new InetSocketAddress(8000));  

  28.     }  

  29.   

  30.     private static class HelloServerHandler extends  

  31.             SimpleChannelHandler {  

  32.   

  33.         /** 

  34.          * 当有客户端绑定到服务端的时候触发,打印"Hello world, I'm server." 

  35.          *  

  36.          * @alia OneCoder 

  37.          * @author lihzh 

  38.          */  

  39.         @Override  

  40.         public void channelConnected(  

  41.                 ChannelHandlerContext ctx,  

  42.                 ChannelStateEvent e) {  

  43.             System.out.println("Hello world, I'm server.");  

  44.         }  

  45.     }  

  46. }  

 

  1. /** 

  2.  * Netty 客户端代码 

  3.  *  

  4.  * @author lihzh 

  5.  * @alia OneCoder 

  6.  * @blog http://www.coderli.com 

  7.  */  

  8. public class HelloClient {  

  9.   

  10.     public static void main(String args[]) {  

  11.         // Client服务启动器  

  12.         ClientBootstrap bootstrap = new ClientBootstrap(  

  13.                 new NioClientSocketChannelFactory(  

  14.                         Executors.newCachedThreadPool(),  

  15.                         Executors.newCachedThreadPool()));  

  16.         // 设置一个处理服务端消息和各种消息事件的类(Handler)  

  17.         bootstrap.setPipelineFactory(new ChannelPipelineFactory() {  

  18.             @Override  

  19.             public ChannelPipeline getPipeline() throws Exception {  

  20.                 return Channels.pipeline(new HelloClientHandler());  

  21.             }  

  22.         });  

  23.         // 连接到本地的8000端口的服务端  

  24.         bootstrap.connect(new InetSocketAddress(  

  25.                 "127.0.0.1"8000));  

  26.     }  

  27.   

  28.     private static class HelloClientHandler extends SimpleChannelHandler {  

  29.   

  30.   

  31.         /** 

  32.          * 当绑定到服务端的时候触发,打印"Hello world, I'm client." 

  33.          *  

  34.          * @alia OneCoder 

  35.          * @author lihzh 

  36.          */  

  37.         @Override  

  38.         public void channelConnected(ChannelHandlerContext ctx,  

  39.                 ChannelStateEvent e) {  

  40.             System.out.println("Hello world, I'm client.");  

  41.         }  

  42.     }  

  43. }  

既然是分布式的,自然要分多个服务。Netty中,需要区分Server和Client服务。所有的Client都是绑定在Server上的,他们之间是不能通过Netty直接通信的。(自己采用的其他手段,不包括在内。)。白话一下这个通信过程,Server端开放端口,供Client连接,Client发起请求,连接到Server指定的端口,完成绑定。随后便可自由通信。其实就是普通Socket连接通信的过程。

Netty框架是基于事件机制的,简单说,就是发生什么事,就找相关处理方法。就跟着火了找119,抢劫了找110一个道理。所以,这里,我们处理的是当客户端和服务端完成连接以后的这个事件。什么时候完成的连接,Netty知道,他告诉我了,我就负责处理。这就是框架的作用。Netty,提供的事件还有很多,以后会慢慢的接触和介绍。

你应该已经可以上手了:)

本文转载自:http://blog.csdn.net/kobejayandy/article/details/11493717

DEC_LIU
粉丝 27
博文 18
码字总数 9469
作品 0
浦东
架构师
私信 提问
Java NIO框架Netty教程(一) – Hello Netty

先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技...

forever_coder
2014/01/23
536
0
少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

本文引用了“架构师社区”公众号的《史上讲的最好的Java NIO与IO的区别与应用》一文部分内容,感谢原作者的技术分享。 1、引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典...

JackJiang2011
06/25
0
0
Java NIO框架Netty教程(一) Hello Netty(转)

先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技...

大道至簡
2013/08/11
479
0
Qzone 微信 Java高级——dubbo源码分析之远程通信 netty

Java高级——dubbo源码分析之远程通信 netty dubbo 底层通信选择了 netty 这个 nio 框架做为默认的网络通信框架并且通过自定义协议进行通信。dubbo 支持以下网络通信框架: Netty(默认) Min...

Java架构师那些事
2018/08/29
0
0
Java分布式框架netty之NIO框架区别分析

Netty概述: 1、netty是基于Java NIO的网络应用框架,client-server框架 2、Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持, 作为一个异步NIO框架,Netty...

架构师springboot
2018/11/12
481
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
7
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
10
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
12
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
8
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
11
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部