WebSocket与SSE

WebSocket WebSocket连接建立过程 sequenceDiagram note over Client,Server: TCP三次握手(传输层) Client ->> Server: SYN Server ->> Client: SYNC+ACK Client ->> Server: ACK note over Client,Server: HTTP请求 转换为WebSocket协议(应用层) Client ->> Server: HTTP GET请求<br>GET HTTP1.1<br>Connection:Upgrade<br>Upgrade:websocket<br>Sec-Websocket-Key: 字符串.base64() note over Server: Sec-Websocket-Accept=fn(字符串) Server ->> Client: HTTP 101响应<br>HTTP1.1 101 Switching Protocals<br>Sec-Websocket-Accept:base64码<br>Upgrade:websocket<br>Connection:Upgrade note over Client: check(fn(base64(字符串))=Sec-Websocket-Accept) note over Client,Server: Websocket连接成功 基于TCP长连接<br>(HTTP通常返回消息后就断开了 但是ws没断开) Server ->> Client: Websocket数据帧 Server ->> Client: Websocket数据帧 Client ->> Server: Websocket数据帧 Client --> Server: ...... SSE llm chatbot 挨个吐字的过程展示 ...

2024/07/05 · 3 分钟 · 1073 字 · Aris

理解select和epoll

背景 高并发场景常常想到用多线程来接收网络请求 但是多线程会涉及到CPU的上下问切换,会处理一些操作句柄,连接数比较多的时候,会带来极大的开销 多线程并不是最佳的解决方案! ...

2020/01/15 · 4 分钟 · 2003 字 · Aris

数据结构

查找 折半查找 复杂度:O(logn) 对象:排序的数组 内容: 设置高低指针 中间开始,如果值相等则结束 值不相等,高低指针向中间迫近 指针相遇,结束 实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 func BinarySearch(arr []int, goal int) int { // 取高低索引 low, high := 0, len(arr)-1 // 指针未相遇的时候循环 for low <= high { mid := low + (high-low)>>1 midV := arr[mid] // 符合条件,返回索引 if midV == goal { return mid } // 不符合条件,高低指针向中间迫近 if midV < goal { low = mid + 1 } else { high = mid - 1 } } return -1 } 排序 快速排序 x s ...

2019/09/15 · 1 分钟 · 201 字 · Aris

数据库MySQL

常问问题: 可能会手撕数据库语句,一般是查询,这个看你运气了 一些关键字 四个特性,三个“读”(脏读、幻读、不可重复读)、四个隔离级别、乐观悲观锁、表锁行锁之类的 索引是什么、创建索引原则、索引类型 数据库引擎、底层(B+树)及好处 其余的自己看下面的,多理解几遍就能讲出来了 另外还可能要去了解下主从数据库(读写分离)、分库分表、平滑扩容 相关的大致流程,我下面没写 知识内容 InnoDB和MySAM InnoDB和MySAM 操作性: InnoDB具有事务,支持四个事务隔离级别。 适用于大量INSERT或UPDATE操作。 不支持全文索引,新版本支持。 支持外键 MyISAM管理非事务表 它提供高速存储和检索,以及全文搜索能力。 如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择 不支持事务、外键 存储: MyISAM在磁盘上存储成三个文件。表定义 .frm,数据文件.MYD, 索引文件.MYI。跨平台转移麻烦 InnoDB:空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小 索引: InnoDB(索引组织表):能缓存索引,也能缓存数据,必须得有主键 MyISAM(堆组织表):只能缓存索引。非聚类 InnoDB 在做SELECT的时候,要维护缓存数据和索引和其余的,慢一些。MyISAM只缓存索引块 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。 B+树搜索算法搜索索引-取出data值-以此为地址读取数据记录 主索引要求key是唯一的,而辅助索引的key可以重复 InnoDB也使用B+Tree作为索引结构,数据文件本身就是索引文件。 叶节点data域就是数据记录,称之聚类索引 本身要按主键聚类,所以必须要主键(设置自增主键),没有的话分裂维持特性会十分低效。没指定的话会自动选择合适的或自动生成一个隐含字段。长度为6的长整型 辅助索引data存储的主键值 索引 为了 加快对数据表中的检索而创建的分布存储的数据结构 ...

2019/07/17 · 11 分钟 · 5371 字 · Aris

操作系统

面试CS基础——操作系统笔记 一、操作系统概述 操作系统四个特性 并发:同一段时间内多个程序执行。并行(同一时刻多个事件)和并发(同一个时间段多个事件) 并发:同一时间段运行多个程序,操作系统通过进程和线程实现 并行:同一时刻运行多个指令,需要硬件支持,流水线、多核、分布式 共享:系统资源可以被内存中的多个并发执行的进程共用 互斥共享(临界资源,比如打印机)和同时共享 虚拟:通过 时分复用(多道程序技术 分时系统)和空分复用(虚拟内存)技术把一个物理实体虚拟为多个实体 时分复用:多进程在一个处理器并发执行,让每个进程轮流占有处理器,用小时间片快速切换 空分复用:虚拟内存,物理内存抽象为地址空间。 地址空间的页不需要全部在物理内存中,若使用到 不在物理内存 的页时,执行页面置换算法,把页置换到内存中 异步:进程是走走停停的方式执行的,以一种不可预知的速度推进 操作系统主要功能 进程管理:进程控制、进程同步、进程通信、死锁处理、处理机调度 内存管理:内存分配、地址映射、内存保护和共享、虚拟内存 文件管理:存储空间、目录、读写管理和保护 设备管理:处理用户的IO请求、缓冲管理、设备分配、设备管理等 中断和轮询 轮询 早期计算机系统对 I/O 设备的管理方式。 ...

2019/07/15 · 14 分钟 · 6885 字 · Aris

计算机网络

计算机网络 OSI模型 应用层(数据):确定进程之间通信的性质以满足用户需要以及提供网络与用户应用 表示层(数据):主要解决拥护信息的语法表示问题,如加密解密 会话层(数据):提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制,如服务器验证用户登录便是由会话层完成的 传输层(段):实现网络不同主机上用户进程之间的数据通信,可靠与不可靠的传输,传输层的错误检测,流量控制等 网络层(包):提供逻辑地址(IP)、选择最佳路径,数据从源端到目的端的传输 数据链路层(帧):将上层数据封装成帧,用 MAC 地址访问媒介,错误检与修正 物理层(比特流):设备之间比特流的传输,物理接口,电气特性等 在TCP/IP五层中,123层对应应用层 ...

2019/07/05 · 23 分钟 · 11491 字 · Aris