
socket编程
文章平均质量分 91
良之才-小良
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
23 - 高并发- 实例
一、自定义ProBuf解码器:处理半包问题,将Bytebuf数据包->POJO* 1.读取长度,如果长度位数不够,则终止读取。* 2.然后读取魔数,版本号等其他字段。* 3.最后按照净长度读取内容。如果内容字节数不够,则恢复到之前的起始位置,然后终止读取。二、自定义ProBuf编码器:处理半包问题,将POJO->Bytebuf数据包* 1.写入字节码长度* ...原创 2019-11-20 18:40:54 · 425 阅读 · 0 评论 -
22 - 高并发- 序列化Protobuf协议通讯
一、Protobuf简介与JSON、XML相比,Protobuf算是后起之秀,是Google开源的一种数据格式。只是Protobuf更加适合于高性能、快速响应的数据传输应用场景。另外,JSON、XML是文本格式,数据具有可读性;而Protobuf是二进制数据格式,数据本身不具有可读性,只有反序列化之后才能得到真正可读的数据。正因为Protobuf是二进制数据格式,数据序列化之后,体积相比JSO...原创 2019-11-14 10:26:53 · 512 阅读 · 0 评论 -
21 - 高并发- 序列化JSON协议通讯
一、常见JSON开源类库比较Java处理JSON数据有三个比较流行的开源类库有:阿里的FastJson、谷歌的Gson和开源社区的Jackson。(1)Jackson是一个简单的、基于Java的JSON开源库。使用Jackson开源库,可以轻松地将Java POJO对象转换成JSON、XML格式字符串;同样也可以方便地将JSON、XML字符串转换成Java POJO对象。Jackson开源库...原创 2019-11-13 16:44:57 · 546 阅读 · 0 评论 -
20 - 高并发- 序列化
一、序列化框架我们在开发一些远程过程调用RPC的程序时,通常会涉及对象的序列化和反序列化问题。因为TCP协议只能发送字节流。序列化一定会涉及编码和格式化。(Encoding&Format)。 编码方式目前有:JSON和XML。 序列化框架选择:1.序列化后数据要小。2.结构复杂度要低。 Protobuf是一个高性能、易扩展的序列化框架。可以进行二进制序列化。 对于性能要求不...原创 2019-11-13 16:23:46 · 357 阅读 · 0 评论 -
19-高并发- 编码和解码-解码器和编码器的结合
一、Codec类型解码器和编码器是分开实现的,但往往要搭配使用,且具有相反逻辑。再加入流水线时往往需要两次添加。 相互配套的解码器和编码器可以放在同一个类中,netty的新类型-Codec类型。 完成POJO到ByteBuf数据包的配套的编码器和解码器的基类,叫作ByteToMessageCodec<I>,它是一个抽象类。从功能上说,继承它,就等同于继承了ByteToMessa...原创 2019-11-13 11:56:20 · 698 阅读 · 0 评论 -
18-高并发- 编码和解码-Encoder原理与实践
一、编码器的概念编码器是ChannelOutboundHandler出站处理器的实现类。一个编码器将出站对象编码之后,编码后数据将被传递到下一个ChannelOutboundHandler出站处理器,进行后面出站处理。由于最后只有ByteBuf才能写入到通道中去,因此可以肯定通道流水线上装配的第一个编码器一定是把数据编码成了ByteBuf类型。二、MessageToByteEncoder编...原创 2019-11-13 09:03:44 · 298 阅读 · 0 评论 -
17-高并发- 编码和解码-Decoder原理与实践
一、解码和编码的作用netty从底层java通道读到ByteBuf二进制数据,传入Netty通道的流水线。随后开始入站处理。 在入站处理的过程中,需要将ByteBuf二进制数据解码成POJO对象。这个解码过程,通过Netty的Decoder解码器实现。 在出站处理过程中,业务处理后的结果,需要从POJO编码为最终的ByteBuf二进制数据,然后通过底层java通道发送到对端。这个编码过程,...原创 2019-11-13 08:42:37 · 740 阅读 · 0 评论 -
16-高并发-netty原理和基础-ByteBuf缓冲区
netty提供了ByteBuf来替代java NIO的ByteBuffer缓冲区 ,以操作内存缓冲区。一、ByteBuf的优势pooling-池化 不需要flip()方法区切换读/写模式。 扩展性好 可定义缓冲区类型 读取和写入索引分开二、ByteBuf三个重要指针:三、ByteBuf的三组方法ByteBuf写入数据时,如果发现容量不足,则进行扩容,知道扩容到maxC...原创 2019-11-08 15:27:31 · 501 阅读 · 0 评论 -
15-高并发-netty原理和基础-Pipeline流水线详解
每条通道内部都有一条流水线(Pipeline)将Handler装配起来。 netty的业务处理器流水线ChannelPipeline是基于责任链模式来设计的,内部是一个双向的链表结构,能指挥动态添加和删除Handler业务处理器。 channel通道拥有一条channelPipeline通道流水线,每一个流水线节点为一个ChannelHandlerContext上下文对象,每...原创 2019-11-07 16:15:57 · 439 阅读 · 0 评论 -
14-高并发-netty原理和基础-处理器详解
反应器模式中,反应器查询到IO事件后,分发到Handler业务处理器,由Handler完成IO操作和业务处理。 整个IO操作包含五个环节。只有首尾两位环节由netty底层负责完成。这里详细描述一下出站和入站的操作:出站处理:触发方向为自顶向下。从channelOutboundHandler-->netty内部-->系统内核缓冲区。会处理数据(读取)解码+业务处理。关键是ne...原创 2019-11-06 15:29:52 · 374 阅读 · 0 评论 -
13-高并发-netty原理和基础-详解Channel通道
protected AbstractChannel(Channel parent) { this.parent = parent; //父通道//对于连接监听通道来说,其父通道为null id = newId(); unsafe = newUnsafe(); //底层的NIO通道,完成实际的IO操作 ...原创 2019-11-06 09:01:57 · 682 阅读 · 0 评论 -
12-高并发-netty原理和基础-基础原件+启动器
Netty极大地简化了TCP、UDP套接字、HTTP web服务程序的开发。一、出站和入站。简单来说,出站就是指输出,入站就是指输入。二、基本流程Channel --> selector --> Reactor ---> handler第1步:通道注册。IO源于通道(Channel)。IO是和通道(对应于底层连接而言)强相关的。一个IO事件,一定属于某...原创 2019-11-05 17:15:07 · 291 阅读 · 0 评论 -
11-高并发-基础-Future异步回调模式
随着微服务架构的兴起,跨设备调用越来越频繁,一个业务流程,可能调用N次第三方接口,获取N种上游数据。因此,如何高效率地异步去调取这些接口,然后同步的去处理这些接口返回的结果?这是高并发要解决的一个基础问题。在Netty中,大量使用了异步回调模式。一、多线程join合并流程A线程调用线程B的B.join方法,合并B线程。那么,线程A进入阻塞状态,知道B线程执行完成。join方法的三个...原创 2019-10-31 18:45:40 · 1442 阅读 · 0 评论 -
10-高并发-Reactor-反应器模式-
一、总体来说,反应器模式类似事件驱动模式。在事件驱动模式中,当有事件触发时,事件源会将事件dispatch分发到Handler处理器进行事件处理。 反应器模式中的反应器角色,类似于事件驱动模式中的dispatch事件分发器角色。二、反应器模式的重要组件:Reactor反应器:负责查询IO事件,当检测到一个IO事件,将其发送给响应的Handler处理器。 Handler处理器:与IO事...原创 2019-10-30 11:43:56 · 349 阅读 · 0 评论 -
9-高并发-IO读写的底层原理-句柄配置修改-JAVA NIO三大组件
一、内核缓冲区:IO读写对于往往都是指上层程序的IO操作。实际上不是物理设备级别的读写,反而是缓存的复制。 read和write都不负责数据在物理设备和内核缓冲区之间的交换。这项底层交换,由操作系统内核(Kernel)来完成。 在应用程序中,无论是Socket的IO、还是文件IO操作,都属于上层应用的开发。二、进程缓冲区:内核缓冲区是为了减少频繁的与设备之间物理交换。 上层应用使用...原创 2019-10-29 16:09:20 · 461 阅读 · 0 评论 -
8.HTTP和长连接和短连接
1. HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题。 TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。 TCP有可靠,面向连接的特点。2. 如何理解HTTP协议是无状态...原创 2019-10-14 10:13:00 · 178 阅读 · 0 评论 -
2.传统IO
传统IO特点阻塞点-需要一个线程去处理,完毕。server.accept(); inputStream.read(bytes); 单线程情况下只能有一个客户端,只有一个线程,accept被占用。 用线程池可以有多个客户端连接,但是非常消耗性能。 一个线程为一个socket服务。先开一个饭店accept,一个服务员服务一个客人read。传统IO需要四个关键点: 创建服务端...原创 2019-09-24 16:19:45 · 164 阅读 · 0 评论 -
3.NIO
NIO的特点:ServerSocketChannel 等同于传统IOServerSocket SocketChannel 等同于传统IOSocket Selector 监听,是NIO的核心关键,用来监听socket 和serverSocket SelectionKeyNIO的思想: 传统IO的最主...原创 2019-09-25 08:55:41 · 143 阅读 · 0 评论 -
4.NIO vs BIO
NIO vs BIOBlocking IO 同步阻塞式IO如果BIO要能够同时处理多个客户端请求,就必须使用多线程,即每次accept阻塞等待来自客户端请求,一旦受到连接请求就建立通信套接字同时开启一个新的线程来处理这个套接字的数据读写请求,然后立刻又继续accept等待其他客户端连接请求New IO 同步非阻塞式IO同步非阻塞式IO,关键是采用了事件驱动的思想来实现了一个...原创 2019-09-25 10:15:06 · 203 阅读 · 0 评论 -
6.netty服务端
netty版本大致版本分为 netty3.x 和 netty4.x、netty5.xnetty可以运用在那些领域?1分布式进程通信例如: hadoop、dubbo、akka等具有分布式功能的框架,底层RPC通信都是基于netty实现的,这些框架使用的版本通常都还在用netty3.x2、游戏服务器开发最新的游戏服务器有部分公司可能已经开始采用netty4.x 或 netty5....原创 2019-09-25 10:55:34 · 226 阅读 · 0 评论 -
6.netty客户端
public class Client { public static void main(String[] args) { //服务类 ClientBootstrap bootstrap = new ClientBootstrap(); //线程池 ExecutorService boss = Executors.newCachedThreadPool();...原创 2019-09-25 11:55:55 · 107 阅读 · 0 评论 -
5.NIO的Selector(选择器)
Selector一般称 为选择器,它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。使用Selector的好处在于:使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。 ...原创 2019-09-25 18:01:20 · 151 阅读 · 0 评论 -
7.自定义实现NIO设计与分析
关键点分析: 1.一个线程如何安全操作另一个线程?这里通过任务序列-add实现 2.worker和boss是什么?是工作对象(基于父类selector)+线程选择器管理线程:BOSS线程理解:WORKER线程理解:...原创 2019-09-27 23:00:12 · 202 阅读 · 0 评论 -
1.什么是 socket?
socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。UNIX/Linux中的 socket 是什么?在 UNIX/Linux 系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件...原创 2019-09-24 11:09:48 · 320 阅读 · 0 评论