Netty实战 - 1. 基本概念
1. Netty简介
Netty是由JBOSS提供的一个java开源框架。
它提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
Netty是一个基于NIO的客户端/服务器端编程框架。
Netty的成功案例:
Alibaba Dubbo, HornetQ, Vert.x, Apache Cassandra, and Elastic Search上述著名产品都使用Netty
编写其核心的网络通信模块。
2. Netty核心组件
■ Channels
■ Callbacks
■ Futures
■ Events and handlers
2-1) Channel
Channel是一个基本的Java NIO结构。
它表示连接到一些实体,这些实体可以是硬件设备,一个文件,一个网络套接字,或者一个
执行一些独立I/O操作的程序组件,比如读写。
Channel可以打开或关闭, 连接或断开。
2-2) Callbacks
Callbacks也就是我们常说的回调函数。
在Netty中我们在事件中使用回调函数:
比如channelActive()回调函数用于在建立连接的时候,看下面的例子:
public class ConnectHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("Client " + ctx.channel().remoteAddress() + " connected");
}
}
2-3)Futures
当一个操作结束的时候,我们可以通过Future来通知应用程序。
它就像一个异步操作的返回结果的占位符(placeholder)。
在未来的某个时间点结束,并且可以提供访问。
这里你会想到Java基本类的java.util.concurrent.Future
但是JDK的Future有点累赘,它会让你在程序未结束之前一直处于阻塞状态,你必须进行手工的检查,性能有点差!
Netty提供了对于Future的自己的实现ChannelFuture,它提供了五阻塞的Future结构。
异步连接
Channel channel = ...;
// 无阻塞的异步连接Future结构
ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));
我们还可以在ChannelFuture中注册ChannelFutureListener来监听
异步数据传输的状态,以便我们做出进一步的处理,例如:
Channel channel = ...;
ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));
future.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) {
if (future.isSuccess()){
ByteBuf buffer = Unpooled.copiedBuffer("Hello",Charset.defaultCharset());
ChannelFuture wf = future.channel()
.writeAndFlush(buffer);
....
} else {
Throwable cause = future.cause();
cause.printStackTrace();
}
}
});
Netty实战 - 1. 基本概念的更多相关文章
- 重磅!阿里P8费心整理Netty实战+指南+项目白皮书PDF,总计1.08G
前言 Netty是一款用于快速开发高性能的网络应用程序的Java框架.它封装了网络编程的复杂性,使网络编程和Web技术的最新进展能够被比以往更广泛的开发人员接触到. Netty不只是一个接口和类的集合 ...
- 《Netty实战》源码运行及本地环境搭建
1.源码路径: GitHub - zzzvvvxxxd/netty-in-action-cn: Netty In Action 中文版 ,中文唯一正版<Netty实战>的代码清单 下载后 ...
- 1.Netty 实战前言
1.参考文档:Netty实战精髓篇 2.Netty介绍: Netty是基于Java NIO的网络应用框架. Netty是一个NIO client-server(客户端服务器)框架,使用Nett ...
- 1、Netty 实战入门详解
一.Netty 简介 Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程 ...
- Netty实战十四之案例研究(一)
1.Droplr——构建移动服务 Bruno de Carvalho,首席架构师 在Droplr,我们在我的基础设施的核心部分.从我们的API服务器到辅助服务的各个部分都使用了Netty. 这是一个关 ...
- Netty实战十三之使用UDP广播事件
1.UDP的基础知识 我们将会把重点放在一个无连接协议即用户数据报协议(UDP)上,它通常用在性能至关重要并且能够容忍一定的数据报丢失的情况下. 面向连接的传输(如TCP)管理了两个网络端点之间的连接 ...
- Netty实战十一之预置的ChannelHandler和编解码器
Netty为许多通用协议提供了编解码器和处理器,几乎可以开箱即用,这减少了你在那些相当繁琐的事务上本来会花费的时间与精力.我们将探讨这些工具以及它们所带来的好处,其中包括Netty对于SSL/TLS和 ...
- Netty实战四之传输
流经网络的数据总是具有相同的类型:字节(网络传输——一个帮助我们抽象底层数据传输机制的概念) Netty为它所有的传输实现提供了一个通用的API,即我们可以将时间花在其他更有成效的事情上. 我们将通过 ...
- Netty实战一之异步和事件驱动
Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端. 使用Netty你可以并不是很需要网络编程.多线程处理.并发等专业Java知识的积蓄. Net ...
随机推荐
- HDU 3308 LCIS (经典区间合并)【线段树】
<题目链接> 题目大意: 给你一段序列,对其进行两种操作,一是修改某个序号的点的值:二是查询某个区间的LCIS(最长上升子序列). 解题分析: 线段树区间合并的典型例题,用求某个区间的LC ...
- python实现简单工厂模式
python实现简单工厂模式 模式定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工 ...
- Django之win7下安装与命令行工具
Django之win7下安装与命令行工具 下载安装 pip3 install django 注意:自动添加环境变量 测试是否安装成功 1.输入python 2.输入import django 3.输入 ...
- mumu模拟器设置代理/打开网络连接(windows)
adb_server.exe devicesadb_server.exe connect 127.0.0.1:7555adb_server.exe shell am start -a android. ...
- jenkins+springboot+svn linux 自动化部署
需要下载 publish over ssh 插件(远程上传项目到服务器) Maven Integration plugin 插件(构建maven项目) 然后将各种配置配置好 最终项目在服务器上的路径是 ...
- RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—单词注释版)
part of Hypertext Transfer Protocol -- HTTP/1.1RFC 2616 Fielding, et al. 14 Header Field Definitions ...
- java多线程之守护线程(Daemon)
https://blog.csdn.net/u010739551/article/details/51065923/
- 使用Admin监控
在springboot中,也提供了很全面的监控系统.这篇文章介绍一下springboot-admin监控springboot项目. 原来大致是这样的,springboot--admin--server ...
- 从香港机房引入google/bitbucket路由
首先说这种方法有一个局限性:只适用于非CDN网段的引入,比如Google自己足够大,所以用不到CDN,那在香港解析出来的就是Google在香港自己的AS number,因此不存在CDN干扰的问题.如果 ...
- sql server 高级查询
--in和not in子查询 --采用in子查询获得参加考试的在读学生名单select StudentId,StudentName from Student where StudentId in(se ...