udp传输不靠谱

陈速评估了下直播各个服务中,最关键的恐怕就是各层节点之间的数据传输稳定性了。起码在服务器之间传输数据是不能有丢包和乱序现象的,陈速想明白之后,就把肖平安和詹季明一块儿叫到小会议室里商量去了。

“现在老詹那儿已经拿到了三台测试机,” 陈速这是跟肖平安介绍着情况,“我想咱们别等所有代码写完了再来测吧。传输的稳定性这块儿最要命,我想让老詹先测这个功能。你觉得呢,平安?”

“可问题是我那儿的程序还没写完,测不了啊。” 肖平安直接就把问题提了出来。

“那没关系,” 陈速对这个回答并不意外,好整以暇接道:“传输的模块做完了吧?就把那部分单独拿出来,写个测试程序就行,写死一些参数都没问题,反正就是测试嘛。”

“这个应该可以。” 肖平安这回没有表示反对。

“那好,” 陈速松了口气,转向詹季明:“回头老詹你这边拿到程序以后,就分别部署到两台机器上,我到时候会告诉你怎么配置并启动的。”

当天下班前,肖平安提交了测试程序,陈速连同自己的边缘节点程序,一块儿交给詹季明,并告诉他如何启动、运行并查看结果。其实这套测试很简单,就是肖平安从一个组播地址收数据推送给另一台机器,然后陈速的边缘程序会收取数据并保存为本地文件。詹季明用播放器直接打开保存下来的文件,通过播放效果判断传输的稳定性。

次日下班前,詹季明就皱着眉头过来找陈速了,他说:“陈总,测试的有问题呀。” 听到这话,陈速心里一跳,面上还是不动声色,问着:“什么情况?” 这只是一个开始,在后面的工作中詹季明还会带来更加心惊肉跳的结果,陈速那时会觉得现在的问题根本就不叫事了。

“就是我播放保存下来的文件,会出现花屏啊,这是怎么回事?” 詹季明盯着陈速发问。

陈速略默思了一会儿,起身说:“我还是去你那边看看环境吧。” 陈速顺便把肖平安也叫上了。

詹季明给陈速演示着,果然在视频画面中偶尔会出现一帧花屏,但大部分时候播放都是正常的。肖平安有些不以为然地说:“这多久才出一个?偶尔丢个包是难免的吧,再说直播源数据本身也有可能出问题啊。”

詹季明表示反对:“也不是偶尔,反正出问题隔的时间是挺长,但十几二十分钟就肯定会有,而且每次出问题的画面情节还都不一样。直播源是用一个视频文件模拟的,那个文件我完整看了一遍,是没有问题的 。”

“那你再多测测吧,我那边时间紧,等全部完成了再来看看,是不是还有这个问题。” 肖平安说完就回去了。

詹季明有点茫然地看着陈速,问:“陈总,你看这个问题要解决吗?还是我先测别的?”

陈速也望着詹季明陷入了沉思,因为他此时想起的倒不是眼前的问题,而是很久以前他还在读研时上的一堂软件工程实践课。那时学校从知名软件企业里请来了资深技术人担任导师指导实践,那位导师就是郑秋阳,他对着同学们说:“不管到哪家公司,都要和测试人员成为朋友。不要因为他们指出了你的问题,就对他们有排斥心理。要知道,他们指出的每一个问题都是在帮助你们完善自己的工作。如果你们总是拒绝认错的态度,那他们也同样有办法把锅甩出去,最后倒霉的还是你们自己。”

言犹在耳,陈速这会儿已经有了主意。他对詹季明说:“这样吧,不管怎样,不能留着这个隐患。我再把程序改造一下,增加更详细的日志。我们看下到底是在哪一步出的问题,如果传输没有问题,那排除了我们也放心。你这边也就不用通过播放来观察了。你看怎样?”

“那当然最好啊,” 詹季明大喜,“今天看了一天的视频,看得我眼都花了。”

陈速回去就给程序加上了更详细的判断逻辑,并且把异常情况打印到日志里。这一版程序提交给詹季明去部署之后,陈速的脑子也在飞快地转着:如果真是udp传输不靠谱,后面应该怎么办?

改用tcp传输

新的测试程序跑了一晚上,当第二天上班时,陈速看见詹季明的脸,就知道没有什么好消息。

“陈总,” 詹季明撇了撇嘴,说:“日志里看来好像真是传输就有问题啊。”

陈速这时也打开ssh终端,远程登录上服务器查看日志内容。果然如詹季明所说,日志显示发送的数据是正常有序的,但接收端一晚上出现了十几次的丢包和乱序。问题已经很明确了,陈速一拍桌子起身,把梁江峰、肖平安一块儿叫上去小会议室了。

因为日志的证据十分确凿,环境也很单纯,陈速描述完问题以后,梁江峰和肖平安都没有提出疑问。陈速看看大家的反应,只好又强调说:“目前我们还是在公司内网进行测试,交换机上也就我们这一路数据在跑。但从测试结果来看,即使是内网udp传输也还是会有丢包、乱序。将来如果上到公网环境,条件只能比内网更差吧。看来这udp也叫不可靠传输协议,真不是白叫的。”

梁江峰这时开口了,神色严峻:“应该是我们疏忽了,当时应该想到采用udp协议的时候就要加上质量保障措施,例如丢包重传、排序功能的。现在你们再加上还来得及吗?”

没等陈速开口,肖平安倒是突然来了一句:“当初就是这么设计的,开评审会的时候也没人提出疑问啊。这个时候如果要加上这个功能,那肯定要重新设计再评审吧?”

梁江峰脸色更加难看,好半天憋出一句:“那肯定不行,洪总不会给我们这个时间的。”

这时候陈速灵机一动,他想到了个办法,说:“那要不然把udp协议换成tcp协议吧?因为刚才说的质量保障工作,tcp协议里就都实现了,而且我们自己的实现还未必能比系统的协议栈更好呢。”

梁江峰闻言也频频点头,站起身来走到白板前拿起碳素笔刷刷地画了起来。“我看这个办法可以。” 他一边画一边说:“你们看实际上我们服务器传输数据都是在机房之间,走tcp协议就算建立长连接也没有问题,起码这个是能保障的。” 大家也都站到了白板前,各自思考着。

“但是,” 梁江峰忽然想到了什么,“我还要强调一件事,就是你们如果改用tcp协议了,也要考虑到tcp连接断开并续传的问题。那时候可不能再说没想到了啊。”

陈速在心里估了估实现难度和工作量,觉得有底,便应道:“我这边没有问题。平安你怎么样?” 肖平安看看大家的意思一样,也就没有表示反对。梁江峰正想散会,猛然一拍脑门,说:“这事还不能我们几个说了算,最好是告诉洪总这个情况。我们现在去他办公室吧。” 这话说得其他人心里都有些忐忑,但没办法,该来的总是要来,那就去吧。

梁江峰领头敲门推开了洪武青的办公室。洪武青一看来人不少,一时还有些迷惑,梁江峰便先开口把众人在小会议室商量的结果跟洪武青汇报了一下。洪武青闻言没有立即表态,而是低头默思了好一会儿,才抬起头来说:“行吧,可以按你们说的办法去弄。但我要强调一点,就是一定要赶一赶进度了,不能开发到现在还连传输都有问题。”

洪武青即使说这些话时也是语气温和,态度和蔼的。这让陈速想起了钟亚伟,如果此刻对面坐的是钟总,恐怕这办公室里在电闪雷鸣之后还要刮暴风雪吧。不过后来陈速也知道,这只是洪武青对人的态度,在对事情上,洪武青是坚决而毫不退让的。

出了办公室,梁江峰对陈、肖二人说:“你们自己也看到了吧,洪总现在其实是很着急的。每次周一早上开例会,洪总问到我时都后背冒汗。一说直播项目这进展,我都觉得不好意思。也拜托二位多加加班,争取早日把直播这事搞定了吧。”

陈速也是心下哀叹,回到工位马上就修改起代码来。好在他心里有底,而且代码的组织层次也做了抽象,不过两三天功夫就改好并且自测可用了。陈速本想跟肖平安的测试程序一块儿提交给詹季明,但肖平安苦着脸说:“我这边被需求变化折腾得改来改去的,改完还不好用了,老报错。要不你先测自己的吧,等我把全部功能完成了一块测吧。” 陈速闻言只好把修改好的边缘程序提交给詹季明,为了方便测试,又临时写了一个tcp发送程序替代肖平安开发的中转服务程序。

改成tcp传输,运行一晚上之后再查看日志,果然没有再出问题。陈速还不放心,让詹季明再用播放器把保存下来的文件播放一遍,詹季明笑说早就播过了,没问题的。陈速心里想着可算是能喘口气了,于是着手下一项工作,就是和客户端实现对接。

仙人掌之歌——坑,各种坑(1)相关推荐

  1. hive 增加表字段语录_Hive改表结构的两个坑|避坑指南

    Hive在大数据中可能是数据工程师使用的最多的组件,常见的数据仓库一般都是基于Hive搭建的,在使用Hive时候,遇到了两个奇怪的现象,今天给大家聊一下,以后遇到此类问题知道如何避坑! 坑一:改变字段 ...

  2. 【吐血经验】在 windows 上安装 spark 遇到的一些坑 | 避坑指南

    在 windows 上安装 spark 遇到的一些坑 | 避坑指南 最近有个活:给了我一个阿里云桌面(windows 10系统),让我在上面用 scala + spark 写一些东西. 总是报错不断, ...

  3. Spark踩坑填坑-聚合函数-序列化异常

    Spark踩坑填坑-聚合函数-序列化异常 一.Spark聚合函数特殊场景 二.spark sql group by 三.Spark Caused by: java.io.NotSerializable ...

  4. [iOS]贝聊 IAP 实战之见坑填坑

    大家好,我是**贝聊科技** 的 iOS 工程师 @NewPan. 这次为大家带来我司 IAP 的实现过程详解,鉴于支付功能的重要性以及复杂性,文章会很长,而且支付验证的细节也关系重大,所以这个主题会 ...

  5. Cobalt Strike折腾踩坑填坑记录

    文章目录 0X00 背景 0x01 基础原理 0x02 关于破戒 Exit暗桩 0x03 CDN+反代隐藏Teamserver Domain Fronting Proxy 0x04 DNS上线 一个未 ...

  6. 仙人掌之歌——坑,各种坑(3)

    文章目录 客户端播放器兼容性有问题 不定期就会崩溃 谁不是一堆事呢 客户端播放器兼容性有问题 黄云鲲一回来,林象南就叫上了陈速.钟展鹏一块儿到洪武青办公室开会.这个问题主要由陈速来描述,钟展鹏在一边进 ...

  7. 仙人掌之歌——坑,各种坑(2)

    文章目录 直播源不可用 基础库的问题 直播源不可用 之前陈速找钟展鹏聊过之后,就把传输协议发给了对方.但现在因为传输协议发生变更,udp改成了tcp,他赶紧在QQ上通知钟展鹏这件事.陈速本以为钟展鹏那 ...

  8. 仙人掌之歌——进军To C直播(1)

    要解决的问题 只过了两天,洪武青就叫陈速和梁江峰到他办公室去一趟了.进了办公室,钟展鹏和葛栋山也已经在里面了.陈速暗道这看来就是要规划直播CDN的新任务.洪武青示意大家都坐下,这会儿连沙发带椅子,四个 ...

  9. JWT 入坑爬坑指南

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「程序新世界」 越来越多的开发者开始学习 ...

最新文章

  1. php使用ssh远程调用另一个服务器执行命令(python脚本)
  2. 字节Java高级岗:javaio流面试题
  3. 用D触发器构造边沿触发器
  4. python谷歌网页爬虫_python爬虫入门01:教你在 Chrome 浏览器轻松抓包
  5. 单链表逆置 java_单链表的就地逆置--java实现(含头节点和不包含头节点)
  6. jzoj6316-djq的朋友圈【状压dp】
  7. 北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?
  8. Java、Android引用类型
  9. iOS中nil,Nil,NULL的区别
  10. 全栈路线_程序员该走全栈路线还是深度专家路线?
  11. 上传本地代码到github从github下载源码
  12. 在appdelegate中 设置跟视图控制器 但是没办法全屏
  13. BZOJ4029: [HEOI2015]定价
  14. 微型计算机原理与接口周荷琴,微型计算机原理与接口技术周荷琴
  15. 小程序纵向选项卡可以滑动_微信小程序实现选项卡滑动切换
  16. 2010年计算语言学分词作业——采用二元语法模型与viterbi算法分词
  17. 一个人最顶级的自律,是拒绝内耗
  18. methods: 68368 65536
  19. C# 多线程 Invoke BeginInvoke
  20. 自学JAVA,能走多远?

热门文章

  1. java按空格分字符串,两种用空格分隔的java字符串的方式
  2. 打动我的央视一套黄金剧场《牵挂》_huadingjin_新浪博客
  3. 并非少一句话那么简单
  4. 2017年11月英语 ---everything in my plan
  5. php删除sql server 2008,MSSQL_SQL Server2008 数据库误删除数据的恢复方法分享,SQL Server中误删除数据的恢复本 - phpStudy...
  6. 人脸检测背景介绍写的很好,请看知乎原文,https://zhuanlan.zhihu.com/p/32702868
  7. 从公会会长到优秀管理者
  8. 【C4D】模型倒角时出现破面,倒角不了,怎么办?
  9. 如何有效的管理SEO网络推广团队?
  10. 不骗你,步步案例,教你一文搞定python爬虫