毕业后加入了一家大型的互联网公司的音视频产品部门做后台开发,其实我本身是学习自动化的,研究生的方向嵌入式系统,对互联网可是一知半解,因此能进入这样一个大公司还是很幸运的。

刚开始工作的半年应该是在上份工作最快乐的时光,那时候我们十来个人被抽调出来做好友系统,由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的更多相关文章

  1. 2019最新WEB前端开发小白必看的学习路线(附学习视频教程)

    2019最新WEB前端开发小白必看的学习路线(附学习视频教程).web前端自学之路:史上最全web学习路线,HTML5是万维网的核心语言,标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次 ...

  2. php后台开发(二)Laravel框架

    php后台开发(二)Laravel框架 为了提高后台的开发效率,往往需要选择一套适合自己的开发框架,因此,选择了功能比较完善的Laravel框架,仔细学来,感觉和Python语言的框架Django非常 ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. Python必学Django框架,入门到精通学习视频教程全都在这可以领

    “人生苦短,我用python”,学python的小伙伴应该都了解这句话的含义.但是,学python,你真正了了解强大的Django框架吗!? 据说Django还是由吉普赛的一个吉他手的名字命名的呢,有 ...

  5. 游戏服务器框架:Leaf/go

    Leaf 是一个使用 Go 语言开发的开源游戏服务器框架,注重运行效率并追求极致的开发效率.Leaf 适用于几乎所有的游戏类型.其主要的特性: 良好的使用体验.Leaf 总是尽可能的提供简洁和易用的接 ...

  6. Python分布式爬虫必学框架scrapy打造搜索引擎✍✍✍

    Python分布式爬虫必学框架scrapy打造搜索引擎  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身 ...

  7. 学了C++不知道怎么搞后台开发?先看看这份学习路线吧!

    作者:AJ 在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗.不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发. ...

  8. [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧]

    [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧] 想要正常运行django项目所需要知道的注意事项 1. 计算机名称不能有中文,不然bug在哪儿你都不知道! 2. 项目名和py文件名 ...

  9. 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)

    使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?和C Socket服务器比起来有什么优劣?可行性怎么样? 从2013年起,经朋友推荐开始用Golang编写游戏登陆服务器, 配合C++做第三方 ...

随机推荐

  1. linux+jenkins+github+python持续集成

    1.服务器上事先安装jenkins   参见:linux上war包方式安装Jenkins 2.新建一个自由风格的job,名字随意起 3.配置git(拉取github代码) 从github复制pytho ...

  2. Markdown的基本使用指南

    目录 1.标题 2.列表 2.1无序列表 2.1有序列表 3.引用 4.图片和链接 5.粗体和斜体 6.分割线 7.代码框和代码块 8.列表 9.可选框 10.添加目录 Markdown 是一种用来写 ...

  3. java架构之路-(MQ专题)RabbitMQ安装和基本使用

    RabbitMQ安装 我这里安装是使用阿里云的CentOS7.5来安装的,使用CentOS版本低于7的可能会报错. 1.安装rabbitmq所需要的依赖包 输入$ yum install build- ...

  4. 仿写vue UI 组件总结 (自己练习,仿照现有的UI组件)

    UI组件 Vue开发插件流程 本来是昨天要写总结的,感觉自己写不好,就放弃了.今天看到了iview和element有一些摩擦,是关于代码借鉴的问题(哈哈),不做评价.谁下生会写组件,我仿(chao)写 ...

  5. JVM(2) Java内存溢出异常

    在Java虚拟机运行时数据区中,除了程序计数器之外,虚拟机栈.本地方法栈.方法区和Java堆都有发生OutOfMemoryError(简称OOM)异常的可能. 一.Java堆溢出 Java堆用于存储对 ...

  6. class样式的添加和设置.html

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. SpringBoot与MybatisPlus整合之活动记录(十五)

    活动记录和正常的CRUD效果是一样的,此处只当一个拓展,了解即可 pom.xml <dependencies> <dependency> <groupId>org. ...

  8. 实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务

    本文为实战SpringCloud响应式微服务系列教程第九章,讲解使用Spring WebFlux构建响应式RESTful服务.建议没有之前基础的童鞋,先看之前的章节,章节目录放在文末. 从本节开始我们 ...

  9. Map文件从IDA到OD

    目录 什么是map文件 IDA与OD导出使用map文件 注意事项 使用OD载入导出的map文件 什么是map文件 什么是 MAP 文件? 简单地讲, MAP 文件是程序的全局符号.源文件和代码行号信息 ...

  10. mixin 扩展类的装饰

    1,步骤: 1,自定义装饰器 # 我们自定义的装饰器: def my_decorator_1(func): def wrapper(request, *args, **kwargs): print(' ...