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

毕业后加入了一家大型的互联网公司的音视频产品部门作后台开发,其实我自己是学习自动化的,研究生的方向嵌入式系统,对互联网但是只知其一;不知其二,所以能进入这样一个大公司仍是很幸运的。后端

刚开始工做的半年应该是在上份工做最快乐的时光,那时候咱们十来我的被抽调出来作好友系统,由Z组长负责。从产品到开发,大部分都是新入职员工,pm给画了一个大饼,你们都满怀憧憬。闲话少说,先介绍一下刚开始接触后台开发用到的服务器框架。服务器

第一个接触的叫udpserver。顾名思义,就是只支持udp的服务框架。由于咱们部门是作音视频产品的,音视频数据对实时性要求很高,所以经常使用udp传输数据。Udp server是同步多进程模型,包含1个Interface进程和多个Worker进程。框架


 

Iterface进程负责接收来自外部的请求,作一些合法性校验和格式转换后,转发给后端的Worker进程。Worker进程监听不一样的端口收包,并处理业务逻辑。Worker进程的回包直接发给客户端。socket

此处有几个点值得关注:性能

首先,Worker进程监听的是不一样端口。学习

监听相同的端口显然是更常见的作法,而监听相同的端口也须要注意一点,即监听的端口socket必须是从父进程中继承获得的,而非Worker本身建立的socket。由于对于前者内核才能保证调度的均匀性,然后者是没有这种效果的,内核只会把请求包扔给同一个Worker。视频

这里之因此使用监听不一样端口的方案,是为了保证调度的可控性,请求包发往哪一个Worker是有预期的,能够作更个性化的调度策略,问题定位也方便得多。Udp server默认是使用轮询的调度方式。server

第二点是,Worker进程回包是直接返回给客户端的。blog

另外一种常见作法是经过Interface进程回包,缺点是Interface会成为瓶颈。而Worker直接回包的缺点是向外部暴露Worker,不过这个问题并不十分严重。相较之下,咱们更但愿得到性能的提高。为了给客户端回包,Interface会把客户端的ip和端口封装到请求包发给Worker。继承

框架虽简单,可是性能很是优异,做为echosvr性能可达30w+ QPS。可是这个框架不支持TCP,所以只能做为内部的服务框架使用。

由于好久没用这个框架了,以上所述可能有不许确或者不充分的地方,望不吝赐教。

相关文章
相关标签/搜索