java nio框架netty教程_Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。
如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛弃了"Hello world"。那我们就自己写一个最简单的"Hello world"的例子,作为上手。
1 /**
2 * Netty 服务端代码3 *4 *@authorlihzh5 * @alia OneCoder6 * @bloghttp://www.coderli.com
7 */
8 public classHelloServer {9
10 public static voidmain(String args[]) {11 //Server服务启动器
12 ServerBootstrap bootstrap = newServerBootstrap(13 newNioServerSocketChannelFactory(14 Executors.newCachedThreadPool(),15 Executors.newCachedThreadPool()));16 //设置一个处理客户端消息和各种消息事件的类(Handler)
17 bootstrap18 .setPipelineFactory(newChannelPipelineFactory() {19 @Override20 publicChannelPipeline getPipeline()21 throwsException {22 returnChannels23 .pipeline(newHelloServerHandler());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 OneCoder37 *@authorlihzh38 */
39 @Override40 public voidchannelConnected(41 ChannelHandlerContext ctx,42 ChannelStateEvent e) {43 System.out.println("Hello world, I'm server.");44 }45 }46 }
/*** Netty 客户端代码
*
*@authorlihzh
* @alia OneCoder
* @bloghttp://www.coderli.com
*/
public classHelloClient {public static voidmain(String args[]) {//Client服务启动器
ClientBootstrap bootstrap = newClientBootstrap(newNioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));//设置一个处理服务端消息和各种消息事件的类(Handler)
bootstrap.setPipelineFactory(newChannelPipelineFactory() {
@Overridepublic ChannelPipeline getPipeline() throwsException {return Channels.pipeline(newHelloClientHandler());
}
});//连接到本地的8000端口的服务端
bootstrap.connect(newInetSocketAddress("127.0.0.1", 8000));
}private static class HelloClientHandler extendsSimpleChannelHandler {/*** 当绑定到服务端的时候触发,打印"Hello world, I'm client."
*
* @alia OneCoder
*@authorlihzh*/@Overridepublic voidchannelConnected(ChannelHandlerContext ctx,
ChannelStateEvent e) {
System.out.println("Hello world, I'm client.");
}
}
}
既然是分布式的,自然要分多个服务。Netty中,需要区分Server和Client服务。所有的Client都是绑定在Server上的,他们之间是不能通过Netty直接通信的。(自己采用的其他手段,不包括在内。)。白话一下这个通信过程,Server端开放端口,供Client连接,Client发起请求,连接到Server指定的端口,完成绑定。随后便可自由通信。其实就是普通Socket连接通信的过程。
Netty框架是基于事件机制的,简单说,就是发生什么事,就找相关处理方法。就跟着火了找119,抢劫了找110一个道理。所以,这里,我们处理的是当客户端和服务端完成连接以后的这个事件。什么时候完成的连接,Netty知道,他告诉我了,我就负责处理。这就是框架的作用。Netty,提供的事件还有很多,以后会慢慢的接触和介绍。
你应该已经可以上手了:)
java nio框架netty教程_Java NIO框架Netty教程(一) – Hello Netty相关推荐
- java netty教程_Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解一下.我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序.具体能做什么,各位可以尽量发挥想象.技术,是 ...
- java自定义封装一个方法_Java自定义套件封装教程
Java自定义套件封装教程 时间:2017-07-28 来源:华清远见JAVA学院 各位亲爱的小伙伴们大家好,近很多伙伴都问我该怎么做Java自定义套件封装,今天华清Java学院小编在这里做了 ...
- java netty 教程_Java NIO框架Netty教程(十六)
该图是OneCoder通过阅读Netty源码,逐渐记录下来的.基本可以说明Netty服务的启动流程.这里在具体讲解一下. 首先说明,我们这次顺利的流程是基于NioSocketServer的.也就是基于 ...
- java nio教程_Java NIO教程
java nio教程 1.简介 Java NIO是Java 1.4引入的一个库. 自从Java NIO推出以来,它提供了另一种方法来处理I / O和网络事务. 它被认为是Java网络和Java IO库 ...
- java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...
资源名称:Java高级框架应用开发案例教程:struts2+spring+hibernate PDF 第1章 struts+spring+hibernate概述 1.1 框架概述 1.2 struts ...
- java.nio教程_Java NIO系列教程(三) Buffer
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...
- c++框架有哪些_Java Mybatis框架入门教程_v20200726
MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...
- java文件正确编写格式_java Srpingboot框架书写mapper代码的正确格式
java Srpingboot框架书写mapper代码的正确格式 发布时间:2019-07-16原创 阅读(326) 最近新项目使用的是springboot框架,很多地方比以往的spring框架做了简 ...
- java nio 追加写文件_Java NIO在文件末尾追加数据
[java]代码库import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import ja ...
最新文章
- 腾讯云数据库副总监:图数据库好在哪?该用在哪?
- 图像放大算法一:最近邻法(Nearest Interpolation)
- 业界首个!华为联合中国信通院等发布《网络体系强基展望白皮书》
- FPGA在电平接口领域的应用
- 软件Trimmomatic
- 如何:在 Visual Studio 中添加或移除引用(转载)
- security NO.2
- vb.net中类型转换
- [转]tesseract OCR Engine overview字符识别学习
- dedecms /plus/feedback.php SQL Injection Vul
- 启动php出现的错误
- redis高级-------2
- AttributeError: ‘str‘ object has no attribute ‘copy
- 二、源代码=程序集及程序集概念介绍
- 7-16 求符合给定条件的整数集
- 云服务器工具大全,云服务器主要的登陆方法有哪些
- win10电脑突然黑屏 亮屏后出现d-sub是什么意思?
- Mac终端自动补全及常用命令
- 两台电脑大文件传输的详细教程
- elementui实现上传视频功能+预览
热门文章
- 【基于python实现UI自动化】3.4 JS 处理日历控件(删除 readonly 属性)
- 程序员什么时候该考虑辞职?
- 经理人必看:“中国式管理”经典语录
- 未能写入输出文件“c:\Windows\Microsoft.NET\Framework... AppCode.dll 拒绝访问
- 我从建筑工程施工员转行成了数据分析师| 求职分享
- 晚安,2010 - Steven的2010纪念册
- [C++] atoi()和stoi()函数
- 淘淘商城-商城后台商品列表之商品编辑(商品管理-查询商品-编辑商品)
- 小技巧---火狐浏览器显示书签栏
- Android Bluetooth 集成