![](https://img-blog.csdnimg.cn/20200824112102272.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA网络编程
文章平均质量分 80
阅读该专栏需要掌握,OOP编程,java多线程,javaIO编程,java网络编程
JolyouLu
技术交流群 528668633
展开
-
本专栏所有例子对应的github仓库
github:https://github.com/JolyouLu/JAVAIO.git原创 2020-10-04 00:17:54 · 94 阅读 · 0 评论 -
详细JAVA-BIO介绍与优缺点
JAVA-BIOBIO基本介绍java BIO就是传统的javaIO编程,相关的类和接口都在java.io包下BIO(blocking I/O) 同步阻塞,服务端实现模式就是一个客户端接入后就会开启一个线程,专门为这个客户端服务(读写操作),即使这个客户端不做任何事情这个线程也会开着,这就导致很多不必要的开销。BIO方式适用于连接数比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限性,BIO是在JDK1.4以前唯一选择,BIO程序简单易理解BIO编程的基本流程服务端启动一个Se原创 2020-08-23 23:32:07 · 1631 阅读 · 0 评论 -
详细JAVA-NIO介绍与使用
JAVA-NIONIO基本介绍JAVA NIO全称java non-blocking IO,是JDK提供的新API,从JDK1.4开始,java提供了一系列改进输入/输出的新特性,被称为NIO,是同步非阻塞的NIO相关类都被放在java.nio包下,并且对原来java.io包中有很多的类进行改写NIO有三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)NIO是面向缓冲区,或者面向块的编程,数据读取到一个稍后会处理的缓冲区,需要时可在缓冲区中前后移动,这就增加原创 2020-09-20 14:29:07 · 2918 阅读 · 3 评论 -
JAVA-NIO实现聊天室详细代码说明
服务端github源码:https://github.com/JolyouLu/JAVAIO.gitsrc\main\java\com\JolyouLu\nio\groupchat 文件夹下public class GroupChatServer { //定义属性 private Selector selector; private ServerSocketChannel listenChannel; private static final int PORT = 66原创 2020-09-20 18:41:25 · 140 阅读 · 0 评论 -
JAVA-NIO性能优化
NIO性能优化NIO零拷贝基本介绍零拷贝是网络编程的关键,很多性能优化都离不开在java程序中,常用的零拷贝有两种mmap(内存映射)和sendFile传统JAVAIO传统的javaio的拷贝次数传统的javaio流程如下,首先进行一次DMA拷贝(直接拷贝)把数据从硬件拷贝到计算机内核,使用CPU拷贝将系统内核数据拷贝到用户内核下,将来用户内核数据拷贝到Socket缓存中,将来Socket缓存中的数据拷贝到网卡中,这里总共经历了4次的文件拷贝,和3次切换mmap优化mmap优化,原创 2020-10-02 20:33:56 · 356 阅读 · 0 评论 -
Netty快速入门与Reactor模式
Netty概述原生NIO存在的问题NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等需要具备其它的额外技能:要熟悉java多线程,因为NIO编程涉及到Rector模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序开发工作量和难度非常大:例如客户端面临断连重连接,网络闪断,半包读写,失败缓存,网络拥堵和异常流的处理等等JDK NIO的bug:例如臭名昭著的Epoll Bug,原创 2020-10-02 20:37:31 · 224 阅读 · 1 评论 -
Netty-ByteBuf快速上手
Netty-ByteBuf快速上手ByteBuf是Netty对原有NIO中的ByteBuffer进行一个增强,ByteBuf的使用相较于NIO的ByteBuffer使用起来方便很多,ByteBuf优点池化,可以重用ByteBuf实例,节约内存的使用,减少内存溢出的可能读写双指针,不用像ByteBuffer那样需要切换读写模式可以自动扩容链式调用很多地方使用了零拷贝创建ByteBufByteBuf的创建有2种方式,可以从堆内存创建,直接内存创建直接内存直接内存创建,顾名思义就原创 2021-06-06 21:33:30 · 813 阅读 · 0 评论 -
Netty进阶内部组件详解
Netty进阶Bootstrap、ServerBootstrapBootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中ServerBootstrap是服务端的启动引导类,Bootstrap是客户端引导类常用方法方法说明public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)服务器原创 2020-10-03 19:26:49 · 1032 阅读 · 0 评论 -
Netty编解码与自定义协议
Netty编解码与自定义协议编码与解码基本介绍在编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码codec(编码器)的组成部分有两个:encoder(编码器)和decoder(编码器),在发送数据时要把数据encoder转换成字节码数据,收到数据时要把数据decoder转成业务数据Netty的编码器Netty自身提供了一些编码器如,StringEncoder(对字符串进行编码)、ObjectEncoder(对java对象进行编码原创 2020-11-14 16:28:30 · 911 阅读 · 0 评论 -
Netty心跳机制案例
Netty心跳机制项目结构Serverpublic class MyServer { public static void main(String[] args) throws InterruptedException { NioEventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoopGroup workerGroup = new NioEventLoopGroup();原创 2020-10-04 12:37:15 · 154 阅读 · 0 评论 -
Netty聊天室案例
Netty聊天室服务端Serverpublic class GroupChatServer { private int port; //监听端口 public GroupChatServer(int port) { this.port = port; } //编写run方法,处理客户端请求 public void run() throws InterruptedException { //创建两个线程组 Ev原创 2020-10-04 12:29:55 · 102 阅读 · 0 评论 -
Netty-实现RPC框架
Netty实现RPCRPC基本介绍RPC(Remote Procedure Call)远程过程调用,就是一个计算机A上有一个程序,一个计算机B上也有一个程序,A应用程序可以调用B应用程序的方法,调用方式很简单就好像调用自己的本地方法那样常用的RPC框架有:阿里的Dubbo、Google的gRPC、Spring的SpringCloud等RPC调用流程服务消费者(Client)以本地调用方式调用服务ClientStub接收到调用后负责将方法、参数等封装成能够进行网络传输的消息体Client原创 2020-11-29 14:47:22 · 386 阅读 · 0 评论 -
Protobuf自动生成java文件Maven插件
Protobuf插件使用在Netty开发时需protoc转java类,一般的做法是执行protoc命令,依次将.proto文件转成Java类protoc.exe -I=d:/tmp --java_out=d:/tmp d:/tmp/monitor_data.proto今天介绍一个快速的将protobuf转java文件正确姿势,只需要在我们的pom.xml中添加如下配置,然后再maven中执行compile命令则会生成响应的文件注意protoSourceRoot 读取resources目录中的所原创 2020-12-19 22:44:56 · 1304 阅读 · 1 评论 -
UDP使用例子
JAVAIO使用InetAddress用法//使用getLocalHost获取InetAddress对象(本机)InetAddress address = InetAddress.getLocalHost();System.out.println(address.getHostAddress()); //返回本机IPSystem.out.println(address.getHostName()); //输出本机计算机名称//使用getByName获取InetAddress对象(百度)Ine原创 2020-08-22 11:32:11 · 231 阅读 · 0 评论