协议圣经 -协议之服务编写
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协议圣经 -协议之服务编写相关的知识,希望对你有一定的参考价值。
先写了九
一、协议服务
上一章说到协议rtsp ,rtsp协议本身并不难,但是写一个服务确实是需要非常细致的工作,这回我们要做一个rtsp的服务,启动摄像头并且编码成h264以后用udp over rtsp 来等待链接,将摄像头的数据用rtp协议送出去。我们不过多谈论协议本身,协议只是一个协议,可以多抓包分析,但是服务器方面的知识,确实是我们必不可少需要掌握的。
无论任何一种服务器,我们的原理一定是要少拷贝数据,例如以下这三个函数
memset
memcpy
calloc
此类的函数使用一定需要谨慎,程序员若有这样的习惯都是需要更正的:
- 一上手就把内存memset
- 写文件进行跟踪
- 遇到协议转换的时候memcpy 大量使用
- 锁的大量使用和不明白锁机制错用
1、why
为什么我们需要少用和谨慎使用拷贝等函数,因为音视频的数据量是非常大的,短量时间拷贝了巨量数据,得不偿失,本着程序朝轻量和高效的方向走,才能稳定,若cpu被过度使用,自然很多高效的地方得不到施展,会导致程序无法稳定。
2、how
申请了一段内存,为了能够尽量做到零拷贝系统,有两种方法:
2.1 应该在内存的前面流出一段协议转换的头部,
如rtmp协议头部最大18字节
rtp协议最少的12字节头部,每次使用的时候可以内存覆盖,再还原回来
2.2 若使用tcp,则考虑流传送,不用拷贝的时候就不用拷贝。
2.3 三端编写情况
我们在编写程序时,若有服务端,推送端,播放端三端同时编写,那一定要把其中的两端先采用已经稳定和错误少的,否则会走很多弯路。
要实现的
二、分布式
分布式要实现的东西很多
1 实现无干预的安全部署,多使用upnp协议mdns协议
2 分布式系统中的领导选举
3 避免在分布式系统中回退,错误检测和日志推送
4 使用静态稳定性,保证性能
5 随时可进行实施运行状况检查
6 缓存挑战和策略
7 超时,重试和抖动
8 通过负载机制避免过载
9 避免队列积压,实现无队列程序
10 使用随机分布进行工作负载
11 检测分布式系统运营可见性 高可用性 可扩展性
12 单元测试和吞吐量测试
以上是关于协议圣经 -协议之服务编写的主要内容,如果未能解决你的问题,请参考以下文章