7 nicolelili1

尚未进行身份认证

暂无相关简介

等级
TA的排名 3k+

文件消息模型基础实现

一、文件传输与普通传输区别最大的区别:文件数据bytes远远大于普通数据bytes文件传输需分片、组装分片文件传输如何中途取消而不影响后续的Packet发送文件传输校验、保证数据准确性(逻辑上)二、普通数据传输...

2020-02-25 11:32:58

混传数据总结与梳理

一、Connector类Connector中的SocketChannel是Sender和Receiver的实现类,因此Selector具有接收和发送的功能。发送时,将SocketChannel封装成一个StringSendPacket,接收时将StringReceivePacket解析为Striing二、发送接收的流程发送者和接收者是一个整体,都是由SocketChann...

2020-02-16 10:56:04

数据传输稳定性

一、消息粘包1、TCPTCP本质上并不会发生数据层面的粘包TCP的发送方与接收方一定会确保数据是以一种有序的方式到达客户端并且会确保数据包完整TCP数据传输具有:顺序性、完整性2、UDPUDP不保证消息完整性,所以UDP往往发生丢包等情况在常规所说的Socket“粘包”,并非数据传输层面粘包3、粘包“粘包”是数据处理的逻辑层面上发生的粘包这里所说的“粘包...

2020-02-16 05:21:53

借鉴学习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

NIO服务器Thread优化

IoProvider:为所有channel提供注册与取消注册 想要从SocketChannel中读取数据,但是需要使用异步的方式,需要通过观察者模式,采取注册与取消注册的方式。 当SocketChanne中的数据可读或者可取时,通过Callback进行回调处理IoArgs:IO输出、输入参数的封装Receiver:接收...

2020-02-13 08:08:15

NIO重写服务器

一、Channel与BufferChannel可以写到不同的Buffer同理,channel也可以从不同的Buffer中读取数据二、NIO重写服务器监听客户端到达接收、回送客户端转发客户端数据到另外一个客户端多端消息的处理三、3.1 图示3.2 代码服务端:package net.qiujuer.lesson.sample....

2020-01-15 15:38:54

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

NIO family 一览

一、Buffer缓冲区用户数据处理的基础单元,客户端发送与接收数据都需要通过Buffer转发进行二、Channel通道类似于流;但不同于IN/OUT Stream;流具有独占性与单向性;通道则偏向于数据的流通多样性三、Selectors选择器处理客户端所有事件的分发器四、Charset扩展部分Charset字符编码:加密、解密原生支持的、数据通道级...

2020-01-15 06:33:13

阻塞IO和非阻塞IO

一、阻塞IO因为阻塞IO的存在,导致只能使用一个线程进行等待,等待的线程也会引起额外的资源消耗,引起CPU调度问题。如果数量达到百万级,需要发送的数量非常多,此时,大量的时间被用在了线程切换上,我们需要做的是尽量减少CPU处理线程消耗的时间,用来处理真正需要处理的数据。当有客户端到达的时候,服务器会进行接收后的处理流程。accept会由阻塞状态变为非阻塞执行状态,会开启两个线程处理获取...

2020-01-15 06:14:39

服务器性能优化

一、性能监测工具1、jconsolejdk的bin目录,jconsole可以查看当前进程所消耗的资源2、jvisualvmjvisualvm不仅可以调试本地,还可以调试远程2.1 同时运行客户端和服务器2.2 查看server进程的监视器双击server.jar进程,在弹出的界面中选择监视选项卡右下角可以看到线程是10122.3 通过线程...

2020-01-15 05:43:09

服务器状态

一、服务器状态--繁忙每个客户端都需要服务器进行双通等待双通:客户端发送数据到服务器的接收通道双通:服务器回送消息的发送通道每条通道因为堵塞只能使用异步线程实现二、服务器线程数量一个客户端:双通->2条线程n个客户端:2n条线程服务器实际线程数量:2n+(服务器创建时的线程、垃圾回收的线程、监听客户端socket的线程、读取到内容后的转发线程)...

2020-01-15 02:34:45

客户端如何发送消息到客户端

一、每个客户端都是服务器也是客户端吗?不是。如果是这样的话,必须将设备同时设为服务器和客户端,但是这样,也只能实现两台设备之间消息的传输。如果要实现多客户端的话,会非常复杂。二、2个以上的设备如何交互数据?需要约定一个规则作为一条信息完整传输的标志。流程是客户端-->服务器-->转发到客户端三、客户端、服务器之间的线程关系四、通过tcp服务端模拟i...

2020-01-15 01:49:30

简易聊天室案例

一、聊天室数据传输设计这是一个由多人组成的聊天案例,所以称为聊天室。它的基本要素就是多个客户端、服务器。必要条件:客户端、服务器必要约束:数据传输协议(本案例中,每一行都是一条数据)原理:服务器监听消息来源、客户端连接服务器并发送消息到服务器二、客户端、服务器数据交互客户端向服务端发送请求,服务器收到该消息后,向客户端再回送一条消息。这个过程可以是局域网上...

2020-01-14 20:16:23

数据发送与接收并行

服务端接收的socket可能有很多,会将这些客户端保存到一个集合中,当有输入的时候,遍历这些客户端进行发送。当接收的时候,会只解析指定客户端的信息。客户端:package client;import client.bean.ServerInfo;import java.io.IOException;public class Client { public...

2020-01-14 19:20:12

服务端向客户端发送数据,但是客户端接收不到

问题:通过Socket,服务端向客户端发送数据时,客户端一直接收不到服务端发送代码:ClientWriteHandler.this.printStream.print(msg);原因:在socket代码中使用print方法时,要想将数据发送出去,必须在发送的数据后面添加”\n”换行符标识并且调用flush()方法。printwriter如果启用了自动刷新,则只有...

2020-01-14 18:47:05

点对点传输实现

服务端: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

UDP搜索IP与端口

一、UDP优势UDP可以作为广播发送可以用于搜索更专注于传输速度基于报文进行传输二、TCP优势基于连接的传输相对于UDP传输更加精确更能保证数据传输的稳定性与健壮性,如果不发生异常,一定能确定数据完整地送达三、TCP、UDP使用场景3.1 知道服务器的ip地址和端口可以通过TCP进行连接3.2 在局域网中不知道服务器的ip地址,仅知道服务器公...

2020-01-14 08:32:48

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

TCP传输可靠性-排序、丢弃、重发

一、排序、顺序发送、顺序组装当进行一条数据发送的时候,首先,TCP会将这条数据拆分成不同的片段,然后把片段进行一个排序。然后把排序号的片段顺序进行发送。这样,保证了传输的有序性。二、丢弃、超时在整个发送过程中,如果时间片没有到达,或者时间片超时,客户端是可以收到数据被丢弃或者超时的信息的。当客户端知道丢弃或者超时信息,那么,需要重新进行发送。三、重发机制-定时器...

2020-01-13 01:29:32

TCP连接可靠性--三次握手、四次挥手

一、三次握手1.1发送端是客户端,接收端是服务器端第一步是由客户端发起的,服务端其实是处于被动连接状态,此时它处于等待状态。Sender会发送一个SYN命令(连接请求命令),该命令会携带一个随机值x参数,发送到服务端。Receiver收到后会校验SYN命令,如果该命令是完整的,那么会回送一条SYN ACK命令(包含SYN命令和ACK命令,ACK命令是对客户端发送过来的SYN...

2020-01-13 00:57:29

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周上午根据用户上周周三的博文发布情况由系统自动颁发。