网站首页 > 技术文章 正文
每到节假日和过年,需要外出通行的人几乎都会遇到一个问题:抢火车票!当全国上亿人都在固定的时间段抢票,服务器动辄就要承受上百万级并发的情况时,你就会明白,一个支持高并发的服务器架构有多重要!
在后端程序员的面试中,如果你有开发高并发服务器的经验,也往往能得到比别人更多的机会。
提到「高并发」,就不得不提天生为高并发而生的 Go 语言。今天,我们就带大家从 0 开始,用 Go 语言完成一个企业级服务器的开发。
关于实现一个企业级框架,你无需恐惧难度过高,你只需要有 Golang 的基础知识即可。我们会每次只会添加一些微小的功能,以循序渐进的曲线方式了解服务器框架的领域。
教程出自实验楼课程——《Go 并发服务器框架 Zinx 入门》,欢迎来实验楼免费学习!
课程地址:https://www.shiyanlou.com/courses/1639
初探 Zinx 框架
在本章实验中,我们将学习从 0 开始完成一个服务器框架的开发。
知识点
- Zinx 架构图
- 模块化
Zinx 为什么会出现呢?作者是这样说的。
我们为什么要做 Zinx,Golang 目前在服务器的应用框架很多,但是应用在游戏领域或者其他长链接的领域的轻量级企业框架甚少。
设计 Zinx 的目的是让我们可以通过 Zinx 框架来了解基于 Golang 编写一个 TCP 服务器的整体轮廓,让更多的 Golang 爱好者能深入浅出的去学习和认识这个领域。
所以,本课程的实验学习完成后,你将学到:Golang 如何实现 TCP 服务器,一个企业级框架是如何诞生的。
关于实现一个企业级框架,你也无需恐惧难度过高,你只需要有 Golang 的基础知识,我们之后的每一节实验,都只会添加一些微小的功能,以循序渐进的曲线方式了解服务器框架的领域。
Zinx 架构设计
我们先来模拟一下一个客户端请求服务器响应的过程:
- 要有一个客户端对服务器发起请求。
- 我们的服务器应该去启动对客户端的处理模块并打开工作池来提升并发量。
- 处理客户端的模块开启两个模块,一个负责读客户端请求,一个负责写客户端请求。
- 用于读的功能模块,去任务的消息队列里去请求读数据。用于写的功能模块,通过 API 接口,当然我们的 API 不可能只有一个,所以这里肯定是 APIS。
这个过程就是 Zinx 官方架构图中的一个流程:
Zinx 作为一个轻量级框架,虽然轻便,但是却可以满足以上的过程,所以是具生产力的框架。
我在下面整理了一个思维导图,这个导图中就是我们接下来的实验中要实现的功能。我们将从 0.1 版本开始,一直实现到 1.0 的完整版本。
实验总结
今天我们的前导课,主要是给大家讲解了 Zinx 框架的一个架构设计与功能模块有什么,给大家留下一个印象,后面的实验中,我们会逐步去实现相应的模块功能。
后面还有 10 个章节的内容,完全免费,你将学到:
点击左下角“了解更多”,免费学习完整课程内容~
- 上一篇: Go语言实战笔记(十六)| Go 并发示例-Pool
- 下一篇: Go语言入门必知教程-并发
猜你喜欢
- 2024-12-01 Go 并发可视化解释 — 通道
- 2024-12-01 Go并发编程面试15题
- 2024-12-01 Go 语言并发编程实践:从入门到进阶
- 2024-12-01 Go语言编写的简单并发编程示例
- 2024-12-01 并发编程的奇技淫巧:Go语言调度器的内在工作机制
- 2024-12-01 Goroutine 并发调度模型深度解析之手撸一个高性能 goroutine 池
- 2024-12-01 每天2分钟学习GO语言编程(十九)并发简明教程
- 2024-12-01 并发编程,程序员必修课,来看go语言的巧妙实现,极为干练
- 2024-12-01 Go项目中如何限制并发数?Atomic必须掌握
- 2024-12-01 Go语言并发入门
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 526℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 492℃MySQL service启动脚本浅析(r12笔记第59天)
- 472℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 469℃启用MySQL查询缓存(mysql8.0查询缓存)
- 449℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 429℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 426℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)