![](https://img-blog.csdnimg.cn/2019101019331988.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA网络编程
文章平均质量分 91
并发编程是对concurrent包的,网络编程就是对net包的学习,两个都很重要,让我们开始网络编程的学习吧!
jeff.sheng
一只没有梦想的咸鱼
展开
-
协议:TCP缓冲区&滑窗&拥塞控制&慢启动 (建议收藏!)
TCP协议实现非常复杂,学习成本陡峭,大多数开发人员并不能很好掌握,这里纯手工整理出来,希望对大家有所帮助!建议收藏!原创 2021-05-26 09:48:14 · 2099 阅读 · 13 评论 -
网络编程之每天学习一点点[day14]-----netty实现文件下载
本节我们使用netty来实现文件下载,netty的文件下载并不是通过建立长连接来传输下载的,而是通过分片chunked模式下载。import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io....原创 2018-06-28 22:11:26 · 1523 阅读 · 12 评论 -
网络编程之每天学习一点点[day15]-----netty实现http协议
Netty实现http协议,无论从性能还是可靠性上都表现优异,相对于传统的tomcat、jetty容器,它更加轻量和小巧,灵活性和制定性也更好。由于netty是异步非阻塞的,它实现的htttp服务也是异步非阻塞的。import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.Channel;import io.netty.c...原创 2018-06-28 22:16:22 · 339 阅读 · 0 评论 -
网络编程之每天学习一点点[day1]-----传统的bio编程
本文介绍了同步与异步,阻塞与非阻塞的概念以及bio的编码方式。原创 2018-06-17 00:12:23 · 413 阅读 · 0 评论 -
网络编程之每天学习一点点[day2]-----伪异步IO
在jdk1.5以前,java并没有nio的概念,对于上个例子中所讲的传统BIO,每一个客户端的每一个连接都会产生一个线程,久而久之,服务器端就会面临内存爆满的情况导致宕机。那么jdk1.5前,这个为题如何解决?答案是使用伪异步IO,就是线程池+队列组合。实现思路:对于服务端收到的每一个TCP连接,仍然创建一个线程,不过这个线程被一个线程池来管理:import java.util.concurren...原创 2018-06-17 01:44:51 · 263 阅读 · 0 评论 -
网络编程之每天学习一点点[day3]-----java.nio.*Buffer的API操作
本文主要介绍关于java的NIO中关于缓冲区的非阻塞API操作。.原创 2018-06-18 23:29:07 · 369 阅读 · 0 评论 -
网络编程之每天学习一点点[day4]-----nio实现单向通信
NIO的本质是避免原始的TCP连接建立时使用的三次握手操作,减少连接的开销!因为Channel非直连,而是注册到了多路复用器上。一个TCP连接对应多个channel。原创 2018-06-19 15:26:21 · 349 阅读 · 2 评论 -
网络编程之每天学习一点点[day5]-----真正的异步非阻塞
AIO------在NIO的基础上引入了异步通道的概念,并提供了异步文件和异步套接字通道的实现,从而在真正意义上实现了异步非阻塞,这是在jdk1.7及以后才有的。AIO不需要通过类似NIO的多路复用器对注册的通道进行轮训操作,即可实现异步读写,从而简化了NIO的编程模型。也可以称为NIO2.0.这种模式才是真正的异步非阻塞模型。原创 2018-06-19 17:32:40 · 365 阅读 · 0 评论 -
网络编程之每天学习一点点[day6]-----tcp三次握手和backlog
先看一副图:在linux2.2之前:linux内核在底层维护一个由backlog指定大小的队列。客户端发送SYN(第一次握手),服务端收到SYN后,返回一个SYN/ACK(第二次握手),并把连接放入队列中,此时这个连接的状态是SYN_RECEIVED。当客户端返回ACK后(第三次握手),此连接的状态变为ESTABLISHED。队列中只有ESTABLISHED状态的连接能够交由应用程序处理。当队列满...原创 2018-06-24 17:44:34 · 326 阅读 · 0 评论 -
网络编程之每天学习一点点[day7]-----netty之HelloWorld
之前已经学习了socket通信的bio、nio、aio模型,但是如果要实际在工作中应用,还需要不断完善,扩展和优化,有很多细节问题需要处理,比如tcp的拆包粘包问题,数据接收的大小,实际通信中读取和应答的业务逻辑处理等,这些都需要花时间和经验去处理,不是很容易的事情。但是netty!让我们不用再编写复杂的代码逻辑去实现通信!也不需要去考虑性能问题!不需要考虑编解码问题!拆包粘包问题!netty都已...原创 2018-06-25 00:15:29 · 465 阅读 · 0 评论 -
网络编程之每天学习一点点[day8]-----netty之tcp拆包粘包解决方案一“固定分割符”
很简单,直接上代码import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;...原创 2018-06-25 00:20:21 · 580 阅读 · 0 评论 -
网络编程之每天学习一点点[day9]-----netty与tomcat的耦合和解耦
netty程序可以跟tomcat结合使用,也可以单独作为一个服务。第一种,netty和tomcat耦合使用可以在tomcat应用程序启动时初始化netty服务,比如tomcat监听8080端口,netty服务监听8765端口,客户端可以直接发送tcp请求给8765端口,netty服务收到后即可处理数据,这种方式的缺点是跟tomcat的生命周期绑定在了一起。第一种,netty和tomcat解耦这种方...原创 2018-06-25 00:34:59 · 1251 阅读 · 0 评论 -
网络编程之每天学习一点点[day10]-----netty之tcp拆包粘包解决方案二“固定字符串长度”
固定字符串的长度的方式主要是依赖于这个类,先看下jdk中的解释io.netty.handler.codec.FixedLengthFrameDecoderA decoder that splits the received ByteBufs by the fixed number of bytes. For example, if you received the following four f...原创 2018-06-26 00:44:53 · 512 阅读 · 0 评论 -
网络编程之每天学习一点点[day11]-----netty最佳实践之数据通信
使用Netty进行两台或者多台服务器之间的数据通信,大体有以下三种情况:1 使用长连接通道不断开的方式进行通信。也就是服务器和客户端的通道不断开,一直处于开启状态,如果服务器的性能足够好,并且我们的客户端数量足够少的情况下,推荐这种方式。2 一次性批量提交数据,推荐采用短连接方式。即我们可以把数据保存在本地临时缓冲区或者临时表中,当到达一定临界值的时候一次性批量提交,或者是根据定时任务轮询提交,这...原创 2018-06-26 01:12:10 · 471 阅读 · 0 评论 -
网络编程之每天学习一点点[day12]-----netty最佳实践之心跳检测
实际应用中,常见的有一个master机器和多个slave机器组成的集群,master常需要对slave进行心跳检测,接收来自slave的信息,这个例子中我们就使用netty来实现。Serverimport io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channe...原创 2018-06-26 23:50:52 · 700 阅读 · 0 评论 -
网络编程之每天学习一点点[day13]-----netty编解码技术
编解码技术,说白了就是java序列化传输,序列化的目的就两个:第一个是进行网络传输,第二对象持久化。虽然我们可以使用java进行对象序列化,netty去传输。但是java序列化的硬伤太多,比如java序列话没办法跨语言、序列化后的码流太大、序列化性能太低等等主流的编解码框架:JBOSS的MarsShaling包google的Protobuf基于Protobuf的KyroMessagePack框架J...原创 2018-06-28 00:19:40 · 272 阅读 · 0 评论