![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
netty
文章平均质量分 84
清风拂来水波不兴
远在天涯
展开
-
netty实现安卓聊天系统(仿qq)
介绍经过了前段时间对网络编程和netty框架的学习,也算是有很大的收获,为了巩固知识,所以我写了一个基于netty的实时聊天系统当做课程设计,客户端我是采用的安卓系统,其实大体上并不难,只是根据我们的业务需求写一些crud和界面改动而已。此系统还有很多可以扩展的地方,如rpc调用,群聊等,大家可以自行扩展。数据库的话我是在服务器上用的mysql,为了简单我使用了mybatis框架,安卓中的数据库SQlit我是没用到的,只是简单的用了键值对的存储方式实现了自动登录,如果...原创 2021-12-31 14:45:36 · 2301 阅读 · 0 评论 -
Netty RPC的实现
概述什么是RPC? RPC(Remote Procedure Call)即远程过程调用,简单的理解是一个节点请求另一个节点提供的服务,本地过程调用通常是指直接的使用当前程序下的一个方法,而RPC指的是调用远程的不在本机的程序的方法,使用这些方法就好像是在使用本机方法一样,如通常在网络通信时我们有调用远程服务器的方法的需求。比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议RPC的优点:提升系统可扩展性,随着业务的增大,可以在新增的服务...原创 2021-12-30 22:39:28 · 1569 阅读 · 0 评论 -
Netty 连接假死、心跳检测
连接假死网络设备出现故障,例如网卡,机房等,底层的TCP连接已经断开了,但应用程序没有感知到,仍然占用着资源。 公网网络不稳定,出现丢包。如果连续出现丢包,这时现象就是客户端数据发不出去,服务端也一直收不到数据,就这么一直耗着 应用程序线程阻塞,无法进行数据读写问题:假死的连接占用的资源不能自动释放 向假死的连接发送数据,得到的反馈是发送超时解决方法:可以添加IdleStateHandler对空闲时间进行检测,通过构造函数可以传入三个参数readerIdleTimeSeconds原创 2021-11-26 11:29:32 · 2495 阅读 · 0 评论 -
Netty进阶 协议设计与解析 HttpServerCodec、自定义协议Codec,源码分析
上一篇我们讲解了一些Netty给我们提供的一些编解码器,使得我们可以自己来设计一些数据的格式。1.HttpServerCodec服务器的编解码器,遵从HTTP协议一般以Codec结尾的既可以做解码也可以编码,Decoder意为解码,Encoder意为编码。其中解码是ChannelInboundHandlerAdapter的子类(即入站handler),Encoder为ChannelOutboundHandlerAdapter的子类(即出站handler)只需在服务器加上如下代码.原创 2021-11-25 21:47:57 · 3335 阅读 · 0 评论 -
Netty进阶 黏包与半包问题的处理,数据解码器详解
概述假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。(1)服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有半包和拆包;(2)服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP半包;(3)服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包;(4)服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容D1_1,第二次原创 2021-11-20 11:56:48 · 2025 阅读 · 0 评论 -
Netty组件之ByteBuf详解 源码分析
学习了前面的一些netty组件,此篇将讲解最后一个组件ByteBuf,ByteBuf是对Nio的ByteBuffer的一个增强。1.创建ByteBuf对象ByteBuf buf = ByteBufAllocator.DEFAULT.buffer();这是最基本的创建方式,我们也可指定其初始容量和最大容量(可扩容)。首先概要看看源码,有一个大致的了解:点进我们上面的buffer方法,源码的关键代码如下继续查看AbstractByteBufAllocator子实现抽象类,.原创 2021-11-17 22:44:09 · 1158 阅读 · 0 评论 -
Netty 组件 Channel 、Future 、Promise
3.2Channelchannel的主要作用是:close()可以关闭channel closeFuture() 用来处理channel的关闭,做一些关闭后的善后的工作 sync()同步等待channel的关闭 addListener()异步等待channel关闭 pipeline()给pipeline添加处理器 write()将数据写入到缓冲区,需调用flush()刷出数据 writeAndFlush()将数据写入并刷新...原创 2021-11-15 22:26:42 · 1527 阅读 · 0 评论 -
netty结合Slf4j打印日志
1.加入依赖 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <grou.原创 2021-11-12 14:12:52 · 5533 阅读 · 0 评论 -
Netty入门 初识Netty helloword netty组件EventLoop源码分析
1.概述Netty是一个异步的、基于事件驱动(Selector)的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。Netty: HomeNetty的作者为韩国的Trustin leeNetty在java网络应用框架中的地位就好比:spring在javaee开发中的地位以下的框架都使用到了Netty因为他们都有网络通信需求:Cassandra - nosql数据库 Spark - 大数据分布式计算框架 Hadoop - 大数据分布式存储框架 RocketMQ -原创 2021-11-11 18:40:30 · 635 阅读 · 0 评论 -
Netty线程模型 Reactor模型
线程模型线程模型有传统阻塞I/O服务器模型和Reactor模型(网络主流模型)根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现:单Reactor单线程 单Reactor多线程 主从Reactor多线程Netty基于主从Reactor多线程模型,并做了一些改进,其中主从Reactor多线程有多个Reactor单线程Reactor模型Java的NIO模式的Selector网络通讯,其实就是一个简单的Reactor模型。可以说是Reactor模型的朴素原型。.原创 2021-11-07 16:38:56 · 419 阅读 · 0 评论 -
NIO vs BIO vs AIO同步阻塞、同步非阻塞、多路复用、异步非阻塞的解释
stream和channelstream不会自动缓冲数据,channel会自动利用系统提供的发送缓冲区、接收缓冲区(更为底层) stteam仅支持阻塞API,channel同时支持阻塞、非阻塞API,可以配合Selector实现多路复用 二者都为全双工,即读和写可以同时进行IO模型同步阻塞、同步非阻塞、多路复用、异步非阻塞当调用一次 channel.read或stream.read后,会切换至操作系统内核态来完成真正数据读取,而读取又分为两个阶段,分别为:等待数据阶段 复制数据阶原创 2021-11-06 15:49:20 · 249 阅读 · 0 评论 -
IO操作之零拷贝技术(图解)
首先看下面一段代码:File file = new File("hello.txt");RandomAccessFile ra=new RandomAccessFile(file,"r");byte[] buff=new byte[(int) file.length()]; //读取本地文件读到一个byte数组ra.read(buff);Socket socket=...;//向Socket写该数据socket.getOutputStream().write(buff);.原创 2021-11-06 15:47:55 · 245 阅读 · 0 评论 -
Netty基础 NIO SocketChannel 网络编程 自制小型服务器,多线程优化*
上一篇我们讲解了大部分的理论知识,这一篇会讲解一些实际代码部分。首先让我们熟悉一下几个方法:创建一个服务器对象:ServerSocketChannel.open() 服务器对象需要绑定ip和端口,使用bind(InetSocketAddress )方法,需要使用传入InetSocketAddress,只需传入一个端口号即可 服务器调用accept()方法获取客户端的连接请求 通过接收到的客户端连接对象read(buffer)方法获取客户端发送的消息 创建客户端:SocketCha原创 2021-11-05 13:26:29 · 588 阅读 · 0 评论 -
Netty导学之NIO,Channel、Buffer、Selector详解
介绍NIO可翻译为Non-Blocking IO非阻塞IO,也可以称其为New IO 因为其是JDK1.4新出现的。NIO面向缓冲区(IO面向流),基于通道,NIO读写文件更加高效,javaAPI 提供了两套NIO,一套用于标准输入输出,一套基于网络NIO。阻塞和非阻塞的区别我们曾经用到的InputSteam,OutputSteam,Reader,Writer等相关的API进行IO的操作都是阻塞的。阻塞模式下(包括文件IO和网络IO)Accept是阻塞的,只有新连接来了,Accept原创 2021-11-05 11:44:43 · 1270 阅读 · 0 评论