java netty教程_Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道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 }
/**
* Netty 客户端代码
*
* @author lihzh
* @alia OneCoder
* @blog http://www.coderli.com
*/
public class HelloClient {
public static void main(String args[]) {
// Client服务启动器
ClientBootstrap bootstrap = new ClientBootstrap(
new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
// 设置一个处理服务端消息和各种消息事件的类(Handler)
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new HelloClientHandler());
}
});
// 连接到本地的8000端口的服务端
bootstrap.connect(new InetSocketAddress(
"127.0.0.1", 8000));
}
private static class HelloClientHandler extends SimpleChannelHandler {
/**
* 当绑定到服务端的时候触发,打印"Hello world, I'm client."
*
* @alia OneCoder
* @author lihzh
*/
@Override
public void channelConnected(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 netty教程_Java NIO框架Netty教程(一) – Hello Netty相关推荐
- java netty 教程_Java NIO框架Netty教程(十六)
该图是OneCoder通过阅读Netty源码,逐渐记录下来的.基本可以说明Netty服务的启动流程.这里在具体讲解一下. 首先说明,我们这次顺利的流程是基于NioSocketServer的.也就是基于 ...
- java nio框架netty教程_Java NIO框架Netty教程(一) – Hello Netty
先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解一下.我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序.具体能做什么,各位可以尽量发挥想象.技术,是 ...
- java quartz实例_Java任务调度框架Quartz教程实例
介绍 Quartz is a full-featured, open source job scheduling service that can be integrated with, or use ...
- netty半包粘包 处理_Java NIO 框架 Netty 之美:粘包与半包问题
一.前言 Netty 是一个可以快速开发网络应用程序的 NIO 框架,它大大简化了 TCP 或者 UDP 服务器的网络编程.Netty 的简易和快速开发并不意味着由它开发的程序将失去可维护性或者存在性 ...
- c++框架有哪些_Java Mybatis框架入门教程_v20200726
MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...
- 【Thrift】Thrift框架和使用教程-- C/S框架使用教程
1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和 ...
- java框架白话_Java NIO框架Netty教程(二) 白话概念
"Hello World"的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什.方便自己以后更灵活的使用和扩展. 声明,笔者 ...
- 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 ...
最新文章
- python getostime_python中sys,os,time模块的使用(包括时间格式的各种转换)
- 构建高可用LVS + keepalived+httpd和双主模型的keepalived方案
- JPQL中使用LIKE进行模糊查询
- 面向对象(继承,多态)
- 计算机仿真课程设计四号题,上海电力学院电子线路计算机仿真课程设计报告
- 红米K20 Pro拍照样张出炉:后置4800万像素高清三摄
- 小蠓虫如何灭_怎样消灭蠓虫?
- mysql常用sql命令
- 分布式文件存储FastDFS之配置Nginx模块
- win10共享计算机win7,win7和win10共享文件怎么设置_win10和win7建立局域网共享操作方法...
- 如何用数据进行产品运营
- Swift游戏实战-跑酷熊猫 04 熊猫的跳和滚的动作
- orcad 连mysql_如何在OrCAD中建立电气互连
- peopleSoft常见错误诊断
- 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)
- Zuul网关服务使用详解
- windbg的k命令
- PDF Squeezer for Mac(强大的PDF文件压缩工具)
- 程序员花式吐槽:月入过万累成狗,还不如富士康技术员!
- 麒麟操作系统+龙心 编译qt-arm
热门文章
- 赌场式交易策略:成功的交易系统要像赌场一样 赚那些赌徒的钱
- linux启动redis报错Failed to start Redis persistent key-value database
- 第10课:scratchjr角色绘画
- 斯坦福 2022 年 AI 指数报告精读
- Failed to connect to github.com port 443 after 21080 ms
- linux 文件恢复删除文件,Linux通过lsof命令恢复误删文件的步骤
- 一键多值的Map~~
- 《高频电子线路》课程参考文献
- 上海市2019年度考试录用公务员
- 为教育工作者精选的8款堪称「神器」的软件,快看过来