
Go高并发服务器
文章平均质量分 89
阶段2 Go语言高并发服务器开发
无休止符
不要让任何事情,成为你不去学习的理由!!!
展开
-
10-Go:HTTP服务器开发
目录一、HTTP服务器概述1 - Web工作方式2 - HTTP协议一、HTTP服务器概述1 - Web工作方式普通的上网过程:浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回HTTP Response(响应)包;客户端收到来自服务器的响应后开始渲染这个Resp原创 2022-05-12 14:58:13 · 523 阅读 · 0 评论 -
9-Go综合案例:并发聊天室
目录一、模块简述二、流程分析三、源码实现一、模块简述(1)主go程:负责监听、接收用户(客户端)连接请求,建立通信关系;同时启动相应的协程处理任务(2)处理用户连接协程HandleConnect:负责新上线用户的存储,用户消息读取、发送,用户改名、下线处理及超时处理;为了提高并发效率,同时给一个用户维护多个协程来并行处理上述任务(3)用户消息广播协程Manager:负责在线用户遍历,用户消息广播发送,需要与HandleConnect协程及用户子协程协作完成(4)协程间应用数据及通信map:存原创 2022-05-11 02:17:24 · 411 阅读 · 4 评论 -
8-Go:Socket通信(2)
目录一、TCP状态转换二、UDP通信1 - UDP简单服务器2 - UDP简单客户端3 - UDP并发服务器4 - TCP和UDP的区别三、案例:文件传输1 - 命令行参数获取2 - 文件属性获取3 - 文件传输:发送端4 - 文件传输:接收端一、TCP状态转换主动发起连接请求端(实线):CLOSED —— 完成三次握手 —— ESTABLISEHED(数据通信状态)—— Dial()函数返回被动发起连接请求端(虚线):CLOSED —— 调用Accept()函数 —— LISTEN —— 完成三次原创 2022-05-10 22:47:30 · 275 阅读 · 0 评论 -
7-Go:Socket通信(1)
目录一、网络概述1 - 协议2 - 网络分层模型3 - 数据通信过程二、Socket编程1 - Socket概述2 - 网络应用程序设计模式三、TCP通信一、网络概述1 - 协议协议:一组规则,要求使用协议的双方,必须严格遵守协议内容典型协议传输层:常见协议有TCP/UDP协议TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议UDP用户数据报协议(User Datagram Protocol)是OSI参考模原创 2022-05-10 18:36:25 · 971 阅读 · 0 评论 -
6-Go锁和条件变量
目录前言一、死锁1 - 单go程自己死锁2 - go程间channel访问顺序导致死锁3 - 多go程,多channel交叉死锁二、互斥锁三、读写锁四、条件变量1 - 条件变量概念2 - 条件变量常用方法3 - 条件变量实现生产者消费者模型前言前面我们为了解决协程同步的问题我们使用了channel,但是GO也提供了传统的同步工具它们都在GO的标准库代码包sync和sync/atomic中什么是锁:就是某个协程(线程)在访问某个资源时先锁住,防止其它协程的访问,等访问完毕解锁后其他协程再来加锁进行原创 2022-05-09 16:04:07 · 479 阅读 · 0 评论 -
5-Go的select监听
目录一、select简介二、select的运行原理三、select的注意事项四、select案例:斐波那契数列五、select超时一、select简介select作用:Go里面提供了一个关键字select,通过select可以监听channel上的数据流动select用法:select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述select限制:与switch语句相比, select有比较多的限制,其中最大的一条限制就是每个case语句里必须原创 2022-05-08 22:21:33 · 1034 阅读 · 0 评论 -
4-Go定时器
目录一、定时器简介二、定时器原理三、三种定时方法四、定时器的停止和重置五、周期定时器一、定时器简介Timer概述:Timer是一个定时器。代表未来的一个单一事件,你可以告诉timer你要等待多长时间type Timer struct { C <-chan Time r runtimeTimer}Timer结构体原理: 它提供一个channel,在定时时间到达之前,没有数据写入timer.C会一直阻塞。直到定时时间到,向channel写入值,阻塞解除,可以从中读取数据二、定时器原创 2022-05-08 20:43:52 · 355 阅读 · 0 评论 -
4-Go协程间通信与Channel
目录一、channel同步1 - 定义channel2 - 无缓冲channel3 - 有缓冲channel4 - 关闭channel5 - 单向channel一、channel同步1 - 定义channel定义channel:make(chan 类型,容量) ch := make (chan string)写端:ch <- “hehe”;写端写数据,同时没有读端在读。写端阻塞读端:str := <- ch;读端读数据, 同时没有写端在写,读端阻塞len(ch):chann原创 2022-05-07 22:27:41 · 359 阅读 · 0 评论 -
3-Go并发编程与协程Goroutine
目录一、并发编程1 - 并行和并发2 - 程序、进程、线程3 - 进程并发4 - 线程并发5 - 线程同步二、协程Goroutine1 - 协程概念2 - Go并发一、并发编程1 - 并行和并发并发编程概述:简而言之,所谓并发编程是指在一台处理器上“同时”处理多个任务并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行原创 2022-04-28 16:13:11 · 330 阅读 · 0 评论 -
2-Go强化(2):结构体和文件操作
目录一、结构体1 - 结构体变量定义和初始化2 - 结构体赋值、比较和传参3 - 结构体指针二、字符串处理函数三、文件操作强化1 - 创建文件和打开文件2 - 写文件操作一、结构体1 - 结构体变量定义和初始化结构体类型:有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员普通变量定义和初原创 2022-04-27 16:29:28 · 334 阅读 · 0 评论 -
1-Go强化(1):指针、切片、map
目录一、指针加强1 - 指针地址变量空间2 - 栈帧的内存布局3 - 空指针和野指针4 - 函数new5 - 左值与右值6 - 指针的函数传参二、切片加强一、指针加强1 - 指针地址变量空间指针:指针就是地址; 指针变量就是存储地址的变量*p:解引用、间接引用func main() { var a int = 10 var p *int = &a a = 100 fmt.Println("a = ", a) *p = 250 // 借助a 变量的地址,操作a对应空原创 2022-04-27 11:00:58 · 349 阅读 · 0 评论