
网络编程复习
文章平均质量分 67
笼中人.
鱼跃龙门,非一日之功;冰冻三尺,非一日之寒
展开
-
网络编程复习(一):最原始的BIO网络编程
为什么叫最原始,是因为不适于真正的开发环境,原始的BIO缺点很明显,这是很古老的网络编程,大家都知道,Windows下一个程序最大的线程数为1000个,而linux下也最多支持2000的线程数,先不说这种编程的内存够不够容纳一千个线程,就算可以达到1000个线程并发,但也是很少,而且这是阻塞形式的TCP网络编程模式,因此不适合真正的开发环境,这里仅为复习,下面看看代码,容后将介绍其他方式:Cl原创 2017-09-27 21:57:02 · 464 阅读 · 0 评论 -
网络编程复习(九):Netty的编解码技术
编解码技术,说白了就是java的序列化,序列化的作用有两个,网络传输和持久化。随人我们可以使用java提供的序列化方式,netty去传输,但是有很多硬伤,比如java序列化没法跨语言,序列化后码流太大,序列化性能太低等等。主流的编解码框架有:Jboss的marshalling包:今天内容Google的protobuf;基于protobuf的Kyro;MessagePack框原创 2017-09-29 18:02:40 · 375 阅读 · 0 评论 -
网络编程复习(八):Netty解决拆包粘包问题--定长方式
这里说道定长方式,个人觉得定长这种定义方式还是不够方便,因为当数据没有达到规定的长度的时候,你就必须用空格(或其他字符)补齐长度,否则这段不够的数据将会丢失。在Netty中,分隔符与定长唯一的实现区别就是DelimiterBasedFrameDecoder(自定义分隔符)改为了FixedLengthFrameDecoder定长类。client:package 网络编程_netty2;原创 2017-09-29 17:40:46 · 562 阅读 · 0 评论 -
网络编程复习(七):Netty解决拆包粘包问题--分隔符方式
在Netty中实现了2种拆包方式:分隔符方式,定长方式,这里介绍分隔符方式。实现起来很简单:server:package 网络编程_netty2;import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.net原创 2017-09-29 17:25:21 · 630 阅读 · 0 评论 -
网络编程复习(六):Netty入门Demo
关于Netty,可以看做是对JDK的nio API的封装,提供了更简单的实现,同时性能,功能更加丰富以及相对应的安全机制,对于Netty的学习,大家可以访问如下网址,里面讲解的很详细,这里仅写一个小demo作为入门。学习网址:http://ifeve.com/netty5-user-guide/server:package 网络编程_Netty;import io.netty.bo原创 2017-09-28 21:26:57 · 412 阅读 · 0 评论 -
网络编程复习(五):Socket编程中的IO模式详解
先来说说同步和异步:在JAVA的程序设计中,同步就是指代码按顺序一步一步向下执行,比如说main方法,如果没有多线程,那么该方法必定是一步一步按顺序向下执行,那么如果我在main方法中开启一个线程,那么这个单独的线程与main程序在宏观上可以看做是同时执行的,这就是异步。Socket网络编程的通信方式可以分为四种:一:同步阻塞:这是最最古老的实现方式,也是第一节提到的,在此种方式下原创 2017-09-28 15:02:00 · 510 阅读 · 0 评论 -
网络编程复习(四):AIO
AIO理解起来有点绕,本人也懒得用,这都是小demo,了解下概念和流程就可以了,实际应用是不会这么用的,因为多次读写都可能会导致粘包,不完全度等等一系列的问题。Client:package 网络编程_AIO;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.Asyn原创 2017-09-28 14:55:39 · 305 阅读 · 0 评论 -
网络编程复习(三):NIO模式
关于NIO,就是同步非阻塞,虽然效率会提高,但实现起来的有点麻烦,所以实际开发中用的很少,更多的是用Netty框架使用网络Socket,Netty其实是对JDK的nio的一个优化封装,实现起来更加方便,后续也将会介绍,下面看看小demo:client端:package 网络编程_NIO;import java.io.IOException;import java.net.InetSo原创 2017-09-28 13:23:26 · 497 阅读 · 0 评论 -
网络编程复习(二):JDK1.5之前的伪异步BIO编程
在JDK1.5之前并没有提供NIO非阻塞异步通信,那么是怎么实现多个client连接服务器的呢?答案是使用的是伪异步方式,即自定义线程池加队列方式,下面看看代码:client类:与上一篇没有任何变化package 网络编程_最原始BIO2;import java.io.BufferedReader;import java.io.IOException;import java.io.原创 2017-09-27 23:17:32 · 337 阅读 · 0 评论 -
网络编程复习(十):实践----数据通信
这里说一下真实项目应用中使用Netty的场景,大体上一些参数的设置都是根据服务器的性能决定的,这不是我要说的事。我们要考虑得是2台机器(或者多台)使用Netty进行的通信,大体上分为三种:第一种:使用长连接的通道不断开的方式进行通信,也就是客户端和服务端的通道一直处于开启状态,如果服务器性能足够好,并且我们的客户端数量也比较少的情况下,这种方式可以考虑使用。第二种:一次性批量提交数据,原创 2017-09-30 16:02:27 · 432 阅读 · 0 评论