Socket
nicolelili1
这个作者很懒,什么都没留下…
展开
-
socket收获
一、二、三、四、五、六、七、八、转载 2020-04-02 22:08:55 · 356 阅读 · 0 评论 -
简单内存复用与细节优化
一、内存优化细节如图可以看出有内存抖动,解决办法是内存缓存。使用内存缓存的时候需要注意的点就是当一个实例不再使用的时候,也应该去释放这个实例,不能让这个实例越积累越多,从而导致内存溢出。所以内存溢出的概念就是,当一个实例被创建之后,后续过程中不可能用到这个实例的时候,但是我们把这份实例给存储起来了,导致GC无法回收这部分实例,也就导致内存不断上涨,这就是内存溢出。内存溢出是一个不断上涨...转载 2020-04-02 21:48:33 · 1665 阅读 · 0 评论 -
多线程调度瓶颈分析
一、多线程调度瓶颈分析之前加强版的调度流程,在之前的调度流程当中,有一个专属的Accepter的线程,用来做我们的连接。当有新的连接的时候,将它们添加到连接队列。在连接队列中可以分别进行输入、输出的selector的线程,这个线程命名为Processor。当数据就绪的时候,会把scoket通道拿出来,再把任务解析出来,丢到线程池当中去。在线程池中处理对应的reader或者writer。...转载 2020-04-01 06:41:17 · 968 阅读 · 0 评论 -
语音即时通信总结
一、要回答这个问题,从最基本的数据传输开始说。将数据从一个麦克风开始传输到另一个客户端上,并且进行播放来说,它的流程是怎样的呢?对于客户端A来说,它首先会将数据投递到一个SendPacket当中,也就是直流传输,然后会把数据解析成每一个帧,然后将每一个帧的数据解析成IoArgs,最终通过服务器将数据传递到B客户端中,B客户端接收到数据的时候,会反向解析出帧,然后解析成SendPa...转载 2020-03-30 22:55:29 · 1401 阅读 · 0 评论 -
客户端数据编码技术选型
一、语音传输流程要把麦克风录制的声音发送到另一个客户端或者是本机的麦克风上播放,第一步就是录制最原始的声音,最原始的声音就是PCM数据流。这个数据流不能直接进行传输,需要先进行压缩转码操作。而压缩转码和我们的数据流之间其实是一个循环操作,它可以不断去拿原始数据,然后去压缩转码。将数据压缩转码完成之后,需要进行网络传输,此时会把数据发送给另一个客户端。这个发送过程就借助整个后台的体系框架,也...转载 2020-03-30 14:13:17 · 230 阅读 · 0 评论 -
服务器桥接改造实现
一、环形缓冲区环形缓冲区就是一个环形的东西,里面的数据头、尾结合在一起,形成了环形缓冲区。环形缓冲区有一个特点,当一个数据元素被删掉之后,其余的元素不需要移动它的位置。同时,它满足先进、先出的规则,缓冲区比较适合最开始确定的一个最大容量的情况下,那么,往里面填充数据,最终读取数据的过程。在桥接模式中,需要把数据接收下来,然后再发送到另一个客户端。但是,由于同时存在接收和发送,而发送和接...转载 2020-03-30 12:09:04 · 909 阅读 · 0 评论 -
语音数据直流扩展
一、数据传输流程如果想发送数据,先把数据放到Packet中,然后把数据写入到IoArgs中再进行发送。在这个过程中,packet对应的是一个有限大小的inputstream,会把数据读取一部分到buffer中,这个过程是由channel来完成的,也就是从packet到buffer之间的channel来完成的。通过不停地循环buffer,将数据全部填充到Frame当中,再把Frame发送给I...转载 2020-03-30 07:23:14 · 216 阅读 · 0 评论 -
语音即时通信分析
一、二、输入端可以是屏幕也可以是摄像头,通过软件将音频、视频转换为数据,然后该数据流通过管道传输到服务器上面。如果软件具备一定的服务器功能,也可以直接发送到CDN上面。如果传输到服务器的大后台,还可以在该大后台上增加一些广告,用户会看一部分视频,看一部分广告,再看一部分视频,这些是可以在服务器端实时实现的。最后到达客户端。客户端有一个动态码流适配的功能,也就是HLS.三、...转载 2020-03-29 16:29:41 · 364 阅读 · 0 评论 -
心跳包构建与消费调度
一、Netty心跳实现二、重要类HeartbeatReceiveFrame : 心跳接收帧HearbeatSendFrame : 心跳发送帧ScheduleJob : 心跳包调度(一个runnable)IdleTimeoutScheduleJob : 空闲超时的心跳包调度(一个runnable)三、类图四、发送心跳包过程...转载 2020-03-29 13:30:56 · 204 阅读 · 0 评论 -
心跳包必要性与策略选择
一、CS模型中如何相互知晓状态为什么需要心跳包?在传统的CS模型中,客户端与服务端相互发送消息的过程中,是需要知道相互之间的状态的,因为客户端随时可能给服务端发送消息。在聊天过程中,是不可能客户端随时给服务端发送消息,真实情况是服务端收到某个客户端的消息之后推送过来。在这个过程中,服务器需要知道客户端是否可用的。服务端要想知道客户端是否可用,最大的问题在于可能客户端异常地断开了,但是服...转载 2020-03-29 06:03:52 · 1132 阅读 · 0 评论 -
服务器消息调度逻辑规范化
当消息到达服务端的时候,是给所有客户端发送消息,没有一个群的概念。应该有一个新建群,然后加入群聊。加入群聊后,发送消息将会通知到群聊中的所有客户端。也可以退出群聊,退出群聊后发送的消息将不会被客户端收到。二、类说明ConnectorHandlerChain : 连接Handler的链式结构ConnectorCloseChain : 关闭连接链式结构ConnectorStri...转载 2020-03-29 03:07:28 · 222 阅读 · 0 评论 -
数据三层缓冲区IoArgs调度优化
一、三层缓冲区PacketIoArgsFrame二、三者的管理者Packet是AsyncSendDispatcher或者AsyncReceiveDispatcherFrame是AsyncPacketReader或者AsyncPacketWriterIoArgs比较模糊,IoArgs中持有了一个ByteBuffer,她是本次应该发送或者应该接收的数据的存储空间。...转载 2020-03-27 13:22:07 · 410 阅读 · 0 评论 -
并发客户端BUG修复与性能优化二
一、bufferedReader读取数据如果强制退出,读取数据时可能为空,使用str时可能报空指针异常str = bufferedReader.readLine()所以需要添加判断 if(str == null||Foo.COMMAND_EXIT.equalsIgnoreCase(str)){ break; }...转载 2020-03-27 11:17:16 · 232 阅读 · 0 评论 -
消息调度分析
一、客户端与服务器之间最多建立多少个Socket链接?自己的电脑连接达到成千上万个的时候就会发生崩溃。Socket四要素:服务器的地址、服务器的端口、客户端的地址、客户端的端口49152到65535号端口属于“动态端口”范围,没有端口可以被正式地注册占用。65535-49152 = 16383 也就是说使用自己的电脑连接自己的服务器,最多可以连接客户端的数量是16383个。...转载 2020-03-26 23:07:15 · 423 阅读 · 0 评论 -
消息分片设计与实现-发送、接收调度
一、二、转载 2020-03-26 14:46:42 · 547 阅读 · 0 评论 -
消息分片传输设计与实现
一、数据发送过程中存在的问题发送中无法取消文件发送大文件传输容错率较低同一连接无法实现文件、普通消息优先级二、分片数据传输流程三、分片逻辑实现根据文件大小计算分片、并读取数据到分片分片数据固定格式打包发送分片数据解析与分片组装Dispatcher调度逻辑调整四、Packet规则五、分片消息规则六、Packet新规则七、...转载 2020-03-25 06:04:39 · 1203 阅读 · 0 评论 -
文件消息模型基础实现
一、文件传输与普通传输区别最大的区别:文件数据bytes远远大于普通数据bytes文件传输需分片、组装分片文件传输如何中途取消而不影响后续的Packet发送文件传输校验、保证数据准确性(逻辑上)二、普通数据传输...转载 2020-02-25 11:32:58 · 226 阅读 · 0 评论 -
混传数据总结与梳理
一、Connector类Connector中的SocketChannel是Sender和Receiver的实现类,因此Selector具有接收和发送的功能。发送时,将SocketChannel封装成一个StringSendPacket,接收时将StringReceivePacket解析为Striing二、发送接收的流程发送者和接收者是一个整体,都是由SocketChann...转载 2020-02-16 10:56:04 · 224 阅读 · 0 评论 -
数据传输稳定性
一、消息粘包1、TCPTCP本质上并不会发生数据层面的粘包TCP的发送方与接收方一定会确保数据是以一种有序的方式到达客户端并且会确保数据包完整TCP数据传输具有:顺序性、完整性2、UDPUDP不保证消息完整性,所以UDP往往发生丢包等情况在常规所说的Socket“粘包”,并非数据传输层面粘包3、粘包“粘包”是数据处理的逻辑层面上发生的粘包这里所说的“粘包...转载 2020-02-16 05:21:53 · 2100 阅读 · 0 评论 -
借鉴学习HTTP精髓
一、HTTP 1.X1.1 请求头、body的长度HTTP 1.x前面24个字节是描述符,24 bytes是总的长度,头部的长度是16 bytes(可以解析为时间、packet长度和capture长度),然后可以得到body的长度(24bytes-16bytes)1.2下面这个请求和返回中,首先有请求头的信息,这些请求头是通过换行符来进行换行的。请求头的长度可以通过1...转载 2020-02-14 02:55:51 · 384 阅读 · 0 评论 -
NIO服务器Thread优化
IoProvider:为所有channel提供注册与取消注册 想要从SocketChannel中读取数据,但是需要使用异步的方式,需要通过观察者模式,采取注册与取消注册的方式。 当SocketChanne中的数据可读或者可取时,通过Callback进行回调处理IoArgs:IO输出、输入参数的封装Receiver:接收...转载 2020-02-13 08:08:15 · 398 阅读 · 0 评论 -
NIO重写服务器
一、Channel与BufferChannel可以写到不同的Buffer同理,channel也可以从不同的Buffer中读取数据二、NIO重写服务器监听客户端到达接收、回送客户端转发客户端数据到另外一个客户端多端消息的处理三、3.1 图示3.2 代码服务端:package net.qiujuer.lesson.sample....转载 2020-01-15 15:38:54 · 237 阅读 · 0 评论 -
NIO常用的API
一、Selector注册事件1.1SelectionKey.OP_CONNECT连接就绪(客户端连接好了,需要经过三次握手、四次挥手)1.2SelectionKey.OP_ACCEPT接受就绪(有新客户端来了)1.3SelectionKey.OP_READ就读绪(有新数据到达)1.4SelectionKey.OP_WRITE写就绪(...转载 2020-01-15 10:42:39 · 533 阅读 · 0 评论 -
NIO family 一览
一、Buffer缓冲区用户数据处理的基础单元,客户端发送与接收数据都需要通过Buffer转发进行二、Channel通道类似于流;但不同于IN/OUT Stream;流具有独占性与单向性;通道则偏向于数据的流通多样性三、Selectors选择器处理客户端所有事件的分发器四、Charset扩展部分Charset字符编码:加密、解密原生支持的、数据通道级...转载 2020-01-15 06:33:13 · 188 阅读 · 0 评论 -
服务器性能优化
一、性能监测工具1、jconsolejdk的bin目录,jconsole可以查看当前进程所消耗的资源2、jvisualvmjvisualvm不仅可以调试本地,还可以调试远程2.1 同时运行客户端和服务器2.2 查看server进程的监视器双击server.jar进程,在弹出的界面中选择监视选项卡右下角可以看到线程是10122.3 通过线程...转载 2020-01-15 05:43:09 · 886 阅读 · 0 评论 -
服务器状态
一、服务器状态--繁忙每个客户端都需要服务器进行双通等待双通:客户端发送数据到服务器的接收通道双通:服务器回送消息的发送通道每条通道因为堵塞只能使用异步线程实现二、服务器线程数量一个客户端:双通->2条线程n个客户端:2n条线程服务器实际线程数量:2n+(服务器创建时的线程、垃圾回收的线程、监听客户端socket的线程、读取到内容后的转发线程)...转载 2020-01-15 02:34:45 · 1523 阅读 · 0 评论 -
客户端如何发送消息到客户端
一、每个客户端都是服务器也是客户端吗?不是。如果是这样的话,必须将设备同时设为服务器和客户端,但是这样,也只能实现两台设备之间消息的传输。如果要实现多客户端的话,会非常复杂。二、2个以上的设备如何交互数据?需要约定一个规则作为一条信息完整传输的标志。流程是客户端-->服务器-->转发到客户端三、客户端、服务器之间的线程关系四、通过tcp服务端模拟i...转载 2020-01-15 01:49:30 · 1175 阅读 · 0 评论 -
简易聊天室案例
一、聊天室数据传输设计这是一个由多人组成的聊天案例,所以称为聊天室。它的基本要素就是多个客户端、服务器。必要条件:客户端、服务器必要约束:数据传输协议(本案例中,每一行都是一条数据)原理:服务器监听消息来源、客户端连接服务器并发送消息到服务器二、客户端、服务器数据交互客户端向服务端发送请求,服务器收到该消息后,向客户端再回送一条消息。这个过程可以是局域网上...转载 2020-01-14 20:16:23 · 1488 阅读 · 0 评论 -
数据发送与接收并行
服务端接收的socket可能有很多,会将这些客户端保存到一个集合中,当有输入的时候,遍历这些客户端进行发送。当接收的时候,会只解析指定客户端的信息。客户端:package client;import client.bean.ServerInfo;import java.io.IOException;public class Client { public...转载 2020-01-14 19:20:12 · 800 阅读 · 0 评论 -
服务端向客户端发送数据,但是客户端接收不到
问题:通过Socket,服务端向客户端发送数据时,客户端一直接收不到服务端发送代码:ClientWriteHandler.this.printStream.print(msg);原因:在socket代码中使用print方法时,要想将数据发送出去,必须在发送的数据后面添加”\n”换行符标识并且调用flush()方法。printwriter如果启用了自动刷新,则只有...转载 2020-01-14 18:47:05 · 4474 阅读 · 0 评论 -
点对点传输实现
服务端:package server;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;...转载 2020-01-14 09:33:08 · 2121 阅读 · 0 评论 -
UDP搜索IP与端口
一、UDP优势UDP可以作为广播发送可以用于搜索更专注于传输速度基于报文进行传输二、TCP优势基于连接的传输相对于UDP传输更加精确更能保证数据传输的稳定性与健壮性,如果不发生异常,一定能确定数据完整地送达三、TCP、UDP使用场景3.1 知道服务器的ip地址和端口可以通过TCP进行连接3.2 在局域网中不知道服务器的ip地址,仅知道服务器公...转载 2020-01-14 08:32:48 · 3447 阅读 · 0 评论 -
TCP基础数据传输
一、基础类型数据传输byte、char、shortboolean、int、longfloat、double、stringbyte(8位)是最基础的数据类型,是网络传输中最基本的数据类型。byte可以转换为char。short(16位)可以转换位2个byte数组。boolean在c语音中就是0和1。不需要使用int值,直接使用byte值就可以了。int(32位)占4个...转载 2020-01-13 11:52:06 · 1874 阅读 · 0 评论 -
TCP传输可靠性-排序、丢弃、重发
一、排序、顺序发送、顺序组装当进行一条数据发送的时候,首先,TCP会将这条数据拆分成不同的片段,然后把片段进行一个排序。然后把排序号的片段顺序进行发送。这样,保证了传输的有序性。二、丢弃、超时在整个发送过程中,如果时间片没有到达,或者时间片超时,客户端是可以收到数据被丢弃或者超时的信息的。当客户端知道丢弃或者超时信息,那么,需要重新进行发送。三、重发机制-定时器...转载 2020-01-13 01:29:32 · 1513 阅读 · 0 评论 -
TCP连接可靠性--三次握手、四次挥手
一、三次握手1.1发送端是客户端,接收端是服务器端第一步是由客户端发起的,服务端其实是处于被动连接状态,此时它处于等待状态。Sender会发送一个SYN命令(连接请求命令),该命令会携带一个随机值x参数,发送到服务端。Receiver收到后会校验SYN命令,如果该命令是完整的,那么会回送一条SYN ACK命令(包含SYN命令和ACK命令,ACK命令是对客户端发送过来的SYN...转载 2020-01-13 00:57:29 · 435 阅读 · 0 评论 -
TCP核心API
一、Socket1.1Socket()创建一个Socket主要用于创建客户端的连接,客户端创建的时候会创建一个无连接、无绑定的空状态Socket1.2bind()绑定一个Socket到一个本地地址和端口上1.3connect()连接到远程套接字1.4write()把数据写入到Socket输出流1.5read()从Socket...转载 2020-01-13 00:22:15 · 420 阅读 · 0 评论 -
TCP介绍
一、TCP是什么英语:Transmission Control Protocol,缩写为TCPTCP是传输控制协议;是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义与UDP 一样完成第四层传输层所指定的功能与职责二、TCP的机制三次握手、四次挥手具有校验机制、可靠、数据传输稳定三、TCP链接、传输流程客户端经过三次握...转载 2020-01-12 23:56:18 · 3637 阅读 · 0 评论 -
UDP实现局域网搜索
一、目标UDP实现接收消息并回送UDP局域网广播发送实现UDP局域网回送消息实现二、信息接收与回送UDP是一个既有客户端又有服务端的功能,A、B两台计算机之间要想发送广播,A发送的广播B不一定会接收。首先,B先监听一个特定端口比如20000,那么,A向B的2000端口发送一条数据,那么B计算机就可以接受到这条消息并进行处理。当B接收到A的消息的时候,就可以...转载 2020-01-12 21:18:36 · 1260 阅读 · 0 评论 -
UDP单播、广播、多播
一、单播:用于两个主机之间的端对端通信广播:用于一个主机对整个局域网上所有的主机上的数据通信多播:对一组特定的主机进行通信,而不是整个局域网上的所有主机二、IP地址三、广播地址3.1255.255.255.255为受限的广播地址如果向该地址的2000端口号发送一个信息,其实只有局域网内的设备能够收到3.2XXX.XXX.XX...转载 2020-01-12 17:22:44 · 540 阅读 · 0 评论 -
UDP核心API
一、1.1DatagramSocket用于接收与发送UDP的类负责发送某一个UDP包,或者接收UDP包不同于TCP,UDP并没有合并到Socket API中,既是客户端也是服务端1.2DatagramSocket()创建简单实例,不指定端口与IP1.3DatagramSocket(int port)创建监听固定端口的实例1....转载 2020-01-12 17:02:14 · 239 阅读 · 0 评论