`
irfen
  • 浏览: 204883 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Netty学习(1)

 
阅读更多

其实到这家公司也有一段时间了,现在的公司是个做通信的公司,所以有一些知识不得不去学习。

刚来不久就要求用netty做一个通信的模拟。我来这个公司之前连socket是什么都不知道,突然有点想要放弃,但是既然来了便也希望能够安下心去学习些东西好好工作。

既然不得不学习了,那也只有硬着头皮去扣了。这里只是我对自己的一个知识梳理。
首先是SOCKET:
我的理解,就是描述ip地址,端口号的,服务端监听,客户端生成socket连接服务器,服务端生成一个socket,就可以进行通信了。

然后是NIO:
NIO有四大主要概念:Channel, Selector, SelectionKey, Buffer。Netty中同样也少不了这些,并且出于性能和设计上的考虑,对它们进行了扩充。比如netty的buffer包,重新定义了Buffer,提供了各种各样的实现,比jdk中自带的Buffer更加高效与好用。举例来说,jdk中的buffer在读完数据写之前,必须调用一个flip()方法,否则数据出错但不报错,这很容易引起bug。而Netty的Buffer中增加了一个write index,将读写分开,解决了这个问题。另外,jdk的buffer是固定的,而netty还提供了一个可变长的buffer,方便操作。而Channel在Netty中也重新设计,提供了很多种Channel,照顾到不同程序的需要。而Selector和SelectionKey,还是使用jdk自己的。

重要的地方,是Netty定义了很多事件,如connected, messageReceived, messageSent等等。我们可以继承一个Handler,来实现对应的操作,它们将在对应事件发生的时候,被自动调用。这就是“事件驱动”。

为了简化操作,我们还可以使用Encoder和Decoder将传送于网络间的二进制数据与我们操作的pojo进行互转,这样在程序中无须直接操作底层数据。

Netty提供了不少协议的实现,如http等,让Netty有了初步的处理http请求的能力。其http的encoder和decoder,在底层处理http请求的交互数据,将其变为了request, cookie, response等对象。因此现在有很多web框架尝试将Netty作为自己内嵌的http服务器,以达到更佳的性能与方便的操作。不过据我观察,Netty提供的支持还比较简单(如request, response等类中,方法很少),如果真要使用,还需要对它进行扩展。

Netty使用一个Boss线程来处理新连接,而将数据读取和处理等,分给若干个Worker线程。它在内部其实还是使用了“轮询”,去调用selector.select()得到可用事件,最终转变为对Hander中相关回调方法的调用。

我对NIO的理解:
四大概念。对于io操作增加了buffer缓冲区,还有就是一个非阻塞。
非阻塞:应该就是如果有数据什么的需要处理,相应的事件驱动会被调用,不需要轮询。
 
Channel、Buffer

 

Selector:这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册过的socketchannel,然后,我们从这个Channel中读取数据,放心,包准能够读到,接着我们可以处理这些数据。
0
3
分享到:
评论

相关推荐

    Netty基础,用于学习Netty,参考黑马程序员的netty教程

    Netty基础,用于学习Netty,参考黑马程序员的netty教程

    Netty学习资料.zip

    这个“Netty学习资料.zip”压缩包包含了韩顺平老师关于 Netty 的一系列教学资源,包括资料、笔记、课件、代码和软件,这些都是深入理解和实践 Netty 技术的重要参考资料。 首先,资料部分可能包含了一些关于 Netty ...

    Netty全套学习资源(包括源码、笔记、学习文档等)

    本资源包包含 Netty 的全方位学习材料,包括源码、笔记和学习文档,旨在帮助开发者深入理解和掌握 Netty。 一、Netty 源码解析 Netty 的源码是理解其工作原理的关键。通过阅读源码,我们可以了解到 Netty 如何实现...

    netty官网学习手册中文版

    这个“netty官网学习手册中文版”针对的是Netty的3.1版本,虽然现在的Netty已经发展到了5.x版本,但3.1版本的知识仍然具有历史参考价值,特别是对于那些初次接触或需要理解Netty基础概念的开发者来说。 1. **Netty...

    netty-netty-4.1.19.Final.zip_netty_netty学习_rocketmq

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。...深入学习和理解Netty,不仅能够帮助你更好地使用RocketMQ,也有助于你在其他领域开发高性能的网络应用。

    java netty学习资料

    这个学习资料包“java netty学习资料”很可能是为了帮助开发者理解和掌握Netty的核心概念和实践应用。 在Netty中,定义消息协议通讯是构建网络应用的关键步骤。Netty提供了一种灵活的方式来定义自定义的编解码器,...

    netty学习之ServerChannel

    Netty学习之ServerChannel Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本篇中,我们将深入探讨ServerChannel这一核心概念,它是Netty中用于接收客户端...

    Netty实践学习案例

    在深入探讨 Netty 的实践学习案例之前,我们先了解一下 Netty 的核心特性: 1. **异步非阻塞 I/O**:Netty 基于 Java NIO(非阻塞I/O)构建,允许它处理大量并发连接,减少了线程创建和上下文切换的开销。 2. **零...

    netty学习资料001

    这个“netty学习资料001”压缩包可能是为了帮助初学者或有经验的开发者深入理解Netty的工作原理和用法。下面我们将详细探讨Netty的核心概念、特性以及它在实际应用中的价值。 一、Netty简介 Netty最初由JBOSS团队...

    netty学习教程

    这个“netty学习教程”压缩包包含了19个PDF文档,旨在全面介绍Netty的基础知识以及实际应用。以下是根据这些文档标题和描述可能涵盖的主要知识点: 1. **Netty基础** - Netty架构:理解Netty的核心组件,如Event...

    Netty 框架学习 —— 第一个 Netty 应用(csdn)————程序.pdf

    在本篇关于“Netty框架学习——第一个Netty应用”的文章中,我们将深入理解如何使用Netty构建一个简单的Echo服务器和客户端。Netty是一个高性能、异步事件驱动的网络应用程序框架,广泛应用于Java领域的服务器开发。...

    Netty权威指南完整版高清pdf

    总的来说,《Netty权威指南》是一本全面且深入的Netty学习资料,无论你是初学者还是有经验的开发者,都能从中获益,提升你的网络编程技能,为构建高性能、低延迟的网络应用打下坚实基础。通过阅读这本书,你将能够...

    Netty学习笔记_Springboot实现自定义协议.docx

    Netty学习笔记_Springboot实现自定义协议 本文主要介绍了使用Netty框架在Springboot项目中实现自定义协议的方法。自定义协议是指在网络通信中,使用特定的数据格式来传输数据,以满足特定的业务需求。在本文中,...

    Netty权威指南PDF书籍

    1. **Netty 概述** Netty 是由 JBoss 提供的一个开源框架,它简化了网络编程,尤其是 TCP、UDP 和 HTTP 协议的实现。Netty 的设计目标是提供一个灵活且高效的基础架构,允许开发者快速构建网络服务,同时避免常见的...

    netty网络编程学习文档

    这个网络编程学习文档将引导我们深入理解Netty的核心概念和使用技巧。 在"Netty02-入门.md"文件中,通常会涵盖Netty的基础知识,包括如何创建一个简单的Netty服务器和客户端。首先,会介绍Bootstrap类,它是Netty...

    Netty5学习指南

    1. 创建服务器Bootstrap,配置所需的参数,如服务器端口、线程池等。 2. 添加处理器到ChannelPipeline,定义事件处理逻辑。 3. 绑定服务器端口,启动服务监听连接。 4. 当客户端连接时,Netty会自动创建一个对应的...

    netty4 中文学习资料

    这个“netty4 中文学习资料”压缩包可能是包含一系列关于 Netty 4 的教程、文档、案例分析或者代码示例,旨在帮助用户深入理解和掌握这一强大的网络通信库。 Netty 4 相比于之前的版本,引入了许多改进和新特性,...

    netty学习文件,实现http,websocket,protobuf

    1. **配置Bootstrap**:为服务器和客户端设置Bootstrap,指定EventLoopGroup(负责事件循环)和Channel(如NioServerSocketChannel或NioSocketChannel)。 2. **添加处理器**:根据需求添加HttpServerCodec、...

Global site tag (gtag.js) - Google Analytics