后台开发小白必学服务器框架——UDPServer

毕业后加入了一家大型的互联网公司的音视频产品部门做后台开发,其实我本身是学习自动化的,研究生的方向嵌入式系统,对互联网可是一知半解,因此能进入这样一个大公司还是很幸运的。
刚开始工作的半年应该是在上份工作最快乐的时光,那时候我们十来个人被抽调出来做好友系统,由Z组长负责。从产品到开发,大部分都是新入职员工,pm给画了一个大饼,大家都满怀憧憬。闲话少说,先介绍一下刚开始接触后台开发用到的服务器框架。
第一个接触的叫udpserver。顾名思义,就是只支持udp的服务框架。因为我们部门是做音视频产品的,音视频数据对实时性要求很高,因此常用udp传输数据。Udp server是同步多进程模型,包含1个Interface进程和多个Worker进程。
Iterface进程负责接收来自外部的请求,做一些合法性校验和格式转换后,转发给后端的Worker进程。Worker进程监听不同的端口收包,并处理业务逻辑。Worker进程的回包直接发给客户端。
此处有几个点值得关注:
首先,Worker进程监听的是不同端口。
监听相同的端口显然是更常见的做法,而监听相同的端口也需要注意一点,即监听的端口socket必须是从父进程中继承得到的,而非Worker自己创建的socket。因为对于前者内核才能保证调度的均匀性,而后者是没有这种效果的,内核只会把请求包扔给同一个Worker。
这里之所以使用监听不同端口的方案,是为了保证调度的可控性,请求包发往哪个Worker是有预期的,可以做更个性化的调度策略,问题定位也方便得多。Udp server默认是使用轮询的调度方式。
第二点是,Worker进程回包是直接返回给客户端的。
另一种常见做法是通过Interface进程回包,缺点是Interface会成为瓶颈。而Worker直接回包的缺点是向外部暴露Worker,不过这个问题并不十分严重。相较之下,我们更希望获得性能的提升。为了给客户端回包,Interface会把客户端的ip和端口封装到请求包发给Worker。
框架虽简单,但是性能非常优异,作为echosvr性能可达30w+ QPS。但是这个框架不支持TCP,因此只能作为内部的服务框架使用。
因为很久没用这个框架了,以上所述可能有不准确或者不充分的地方,望不吝赐教。
后台开发小白必学服务器框架——UDPServer的更多相关文章
- 2019最新WEB前端开发小白必看的学习路线(附学习视频教程)
2019最新WEB前端开发小白必看的学习路线(附学习视频教程).web前端自学之路:史上最全web学习路线,HTML5是万维网的核心语言,标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次 ...
- php后台开发(二)Laravel框架
php后台开发(二)Laravel框架 为了提高后台的开发效率,往往需要选择一套适合自己的开发框架,因此,选择了功能比较完善的Laravel框架,仔细学来,感觉和Python语言的框架Django非常 ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- Python必学Django框架,入门到精通学习视频教程全都在这可以领
“人生苦短,我用python”,学python的小伙伴应该都了解这句话的含义.但是,学python,你真正了了解强大的Django框架吗!? 据说Django还是由吉普赛的一个吉他手的名字命名的呢,有 ...
- 游戏服务器框架:Leaf/go
Leaf 是一个使用 Go 语言开发的开源游戏服务器框架,注重运行效率并追求极致的开发效率.Leaf 适用于几乎所有的游戏类型.其主要的特性: 良好的使用体验.Leaf 总是尽可能的提供简洁和易用的接 ...
- Python分布式爬虫必学框架scrapy打造搜索引擎✍✍✍
Python分布式爬虫必学框架scrapy打造搜索引擎 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身 ...
- 学了C++不知道怎么搞后台开发?先看看这份学习路线吧!
作者:AJ 在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗.不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发. ...
- [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧]
[Django框架 - 注意事项,安装,项目搭建,小白必会三板斧] 想要正常运行django项目所需要知道的注意事项 1. 计算机名称不能有中文,不然bug在哪儿你都不知道! 2. 项目名和py文件名 ...
- 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)
使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?和C Socket服务器比起来有什么优劣?可行性怎么样? 从2013年起,经朋友推荐开始用Golang编写游戏登陆服务器, 配合C++做第三方 ...
随机推荐
- linux+jenkins+github+python持续集成
1.服务器上事先安装jenkins 参见:linux上war包方式安装Jenkins 2.新建一个自由风格的job,名字随意起 3.配置git(拉取github代码) 从github复制pytho ...
- Markdown的基本使用指南
目录 1.标题 2.列表 2.1无序列表 2.1有序列表 3.引用 4.图片和链接 5.粗体和斜体 6.分割线 7.代码框和代码块 8.列表 9.可选框 10.添加目录 Markdown 是一种用来写 ...
- java架构之路-(MQ专题)RabbitMQ安装和基本使用
RabbitMQ安装 我这里安装是使用阿里云的CentOS7.5来安装的,使用CentOS版本低于7的可能会报错. 1.安装rabbitmq所需要的依赖包 输入$ yum install build- ...
- 仿写vue UI 组件总结 (自己练习,仿照现有的UI组件)
UI组件 Vue开发插件流程 本来是昨天要写总结的,感觉自己写不好,就放弃了.今天看到了iview和element有一些摩擦,是关于代码借鉴的问题(哈哈),不做评价.谁下生会写组件,我仿(chao)写 ...
- JVM(2) Java内存溢出异常
在Java虚拟机运行时数据区中,除了程序计数器之外,虚拟机栈.本地方法栈.方法区和Java堆都有发生OutOfMemoryError(简称OOM)异常的可能. 一.Java堆溢出 Java堆用于存储对 ...
- class样式的添加和设置.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SpringBoot与MybatisPlus整合之活动记录(十五)
活动记录和正常的CRUD效果是一样的,此处只当一个拓展,了解即可 pom.xml <dependencies> <dependency> <groupId>org. ...
- 实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务
本文为实战SpringCloud响应式微服务系列教程第九章,讲解使用Spring WebFlux构建响应式RESTful服务.建议没有之前基础的童鞋,先看之前的章节,章节目录放在文末. 从本节开始我们 ...
- Map文件从IDA到OD
目录 什么是map文件 IDA与OD导出使用map文件 注意事项 使用OD载入导出的map文件 什么是map文件 什么是 MAP 文件? 简单地讲, MAP 文件是程序的全局符号.源文件和代码行号信息 ...
- mixin 扩展类的装饰
1,步骤: 1,自定义装饰器 # 我们自定义的装饰器: def my_decorator_1(func): def wrapper(request, *args, **kwargs): print(' ...