自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

温故而知新

Nothing is more terrible than ignorance in action

  • 博客(169)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++ 程序 Crash 的分析

如果容易,它的复现步骤是什么如果不容易,它在什么条件下的出现机率比较大,有没有可能缩小排查的范围找出 crash 出现的时间范围,时机,和频率根据 backgrace 和 git log, 回顾 crash 相关代码的修改记录假设条件,测试,排除,不断重复,缩小范围有必要时画一张思维导图,记下每条排查路径查询 google, stackflow, 听取同事的意见最后一条,看看破案和推理小说及剧情,学学侦破技术有一些惯犯和惯用作案手段值得研究多线程处理不当多个线程操作一块内存区域,没有安全地加锁和串行

2022-07-12 10:57:50 155

原创 WebRTC simulcast

简介Simulcast 可以翻译成联播,不是新闻联播,而是多个媒体流的传播,如图所示注: SFU 即 Selective Forward Unit, 媒体转发服务器刚开始,发送方 sender 发送一路 1080p 的视频流给服务器 SFU, SFU 再转发给多个接收方 receiver1, receiver2 和 receiver3。一会儿,receiver 2 和 recei...

2022-06-26 11:28:51 215

原创 化繁为简的状态模式

最近看了同事写的一块代码,逻辑非常复杂,我们讨论了实现的方式,我建议他改用状态模式, 这样可以省去很多复杂的判断分支这是用状态模式的做法不用状态模式的代码大致如此if(cpuRatio < xxx && memRatio < xxx) { state=Normal} else if(cpuRatio > xxx && m...

2022-06-25 09:51:48 27

原创 WebRTC 中的多路复用

AbstractWebRTC 中多路复用AuthorsWalter FanCategorylearning noteStatusv1.0Updated2022-4-30LicenseCC-BY-NC-ND 4.0回顾一下这张经典的图我改了一下 audio 和 video 的 codec, 现在 Opus 和 H.264 用的比...

2022-04-30 21:27:18 168

原创 用 Ninja and GN 来加速 C++构建

NinjaNinja 原意是忍者的意思,它是一个专注于速度的小型构建工具。它是一个构建系统。 它将文件的相互依赖关系(通常是源代码和输出可执行文件)作为输入,并快速编排构建它们。运行Ninja,默认情况下,它会在当前目录中查找名为 build.ninja 的文件并构建所有过时的目标。 您可以指定要构建的目标(文件)作为命令行参数。还有一个特殊的语法 target^ 用于将目标指定为某个规则的...

2022-03-19 20:56:48 753

原创 H264 视频流的解析

AbstractH.264 视频流的解析AuthorsWalter FanCategorylearning notesStatusWIPUpdated2021-12-10视频流简介以最流行的H.264编码为例,对于视频流的解析要了解视频帧在RTP包中作为荷载是如何承载和存放的。先回顾一些基础的背景知识,再写一个小程序来分析RTP 视频流。视频...

2021-12-15 23:31:14 711

原创 WebRTC 之 Insertable Stream:端到端加密很简单

Abstract: WebRTC Insertable Stream 的介绍及其端到端加密案例Authors: Walter FanStatus: WIPClass: Learning MinutsUpdated: 2021-10-16目录Insertable Stream 概述Stream API用例接口与模型可读流 Readab...

2021-10-16 20:11:01 489

原创 如何高效地阅读 RFC

由于工作需要,我需要阅读大量的 RFC, 看得我头痛,如何高效地阅读 RFC 是摆在我面前的一个大问题如何高效地阅读 RFC 呢?我的想法如下自顶向下把文章背景,动机,目的和主要内容搞清楚, 纲举目张what, background, motivation, key points自底向上带着问题读 RFC, 把一个个点研究明白,再把它们串起来,将一片片碎片拼成完整的图片How an...

2021-08-17 23:39:39 95

原创 WebRTC 服务器要干些什么

概述WebRTC 的服务器大体分为信令服务器和媒体服务器WebRTC 信令服务器是主要功能是为 WebRTC 通讯搭建一个了解彼此能力的通道, 交换信息, 同步改动.而媒体服务器就是用来交换媒体,包括对媒体数据的加解密,编解码,带宽和速率控制等功能不同的 RTP Toplogies 对服务器有不同的要求WebRTC 或者说多媒体通信一般有如下的几种拓扑结构:Point to Poin...

2021-08-01 08:05:53 88

原创 WebRTC 之度量与统计: 到底出了什么问题

由于新冠疫情,我们待在家中,在网上工作,开会,看电影的时间越来越多了。网络嘛,大家都知道,时常不稳定,网上开会时声音听不清楚,图像模糊,视频有马赛克(不是人为打的)的情况时有发生,这时候,问题出在哪里呢?也许是网络的问题,也许不是,即使网络出现问题,只要不是不可忍受的,我们依然需要进行调整,保证基本的功能:语音通话要保持通畅,这是要首先保证的共享的桌面或文件内容要能够识别视频要能看到,哪...

2021-07-14 22:55:06 326

原创 高性能服务器开发检查清单

操作系统Linux: CentOS 是首选, Ubuntu 或 Redhat 其他系统亦可编程语言C或C++ 是首选,适合于计算量大和对性能要求比较高Java 对于复杂的业务逻辑比较有优势,只要你对由于 GC 导致的延迟不敏感.GO 语言颇有后来居上的势头,只需要发布二进制包,无需解释或执行器,而且跨平台兼容性,性能也不错,内置了并发和网络库也很不错线程模型:网络线程: No...

2021-06-08 07:18:13 57 2

原创 微服务治理的思考

在分布式系统, 特别是采用微服务架构中存在诸多服务, 它们之间存在着复杂的调用和依赖关系, 我们需要一个框架对如下方面来进行统一管理服务注册服务提供方将服务注册到集中的服务注册中心服务发现管理和更新服务的状态和信息, 以供服务消费方检索并使用这些服务服务诊断记录每个服务的调用日志,并自动生成调用链, 基于调用链进行自动的故障分析支持服务升降级和扩展在服务负载上升自动扩容, 在负载...

2021-05-30 10:04:16 120

原创 通过 WebRTC 共享屏幕很容易

简介网络会议中常用的屏幕共享功能使用WebRTC 提供的 getDisplayMedia API 就能轻松实现,接口如下var promise = navigator.mediaDevices.getDisplayMedia(constraints);MediaDevices 接口的 getDisplayMedia 方法提示用户选择并授予将显示屏幕或其部分(如浏览器窗口和标签页)的内容捕获...

2021-04-25 21:44:53 1371 3

原创 如何创建 WebRTC 会话二

WebRTC 是一套基于 Web 的实时通信解决方案,通过浏览器内置的 API 来支持音视频通道的搭建。简而言之,先在信令通道协商出彼此的媒体和通信参数, 再通过媒体通道来传输音视频媒体数据。这一套媒体会话的搭建流程定义为 “JavaScript Session Establishment Protocol” JavaScript 会话创建协议WebRTC 的信令,媒体以及数据通道首先看一下...

2021-03-21 20:31:10 120

原创 WebRTC 之 SDP

SDP 即 Session Description Protocol 会话描述协议, 它描述了所传输的媒体信息。之所以需要在多媒体通信之前交换 SDP, 就在于接收方需要知道传输的是什么媒体类型,什么编码格式,以便正确的回放,发送方需要知道接收方能接受什么媒体格式,网络连接地址是多少,从而知道如何编码,向哪里传输。SDP 内容简介SDP 所描述的会话信息主要有1. Session ...

2021-03-10 22:38:35 222

原创 WebRTC 相关标准和协议一览

WebRTC 是一套基于 Web 的实时通信解决方案。其官网上的解释如下:借助WebRTC,您可以在基于开放标准的应用程序中添加实时通信功能。 它支持在端点之间发送视频,语音和一般的数据信息,从而使开发人员能够构建功能强大的语音和视频通信解决方案。该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。 WebRTC背后的技术被实现为一个开放的Web标准,并在所有主要浏览器中均以常规Ja...

2021-03-04 22:16:55 426 1

原创 WebRTC 之 PeerConnection: 细说对等连接建立流程一

WebRTC 是一套基于 Web 的实时通信解决方案,通过浏览器内置的 API 来支持音视频通道的搭建。简而言之,先在信令通道协商出彼此的媒体和通信参数, 再通过媒体通道来传输音视频媒体数据。JavaScrpt 中用到的三个主要的对象有:MediaStream 获取和渲染音频和视频流RTCPeerConnection 支持音频和视频媒体数据通信RTCDataChannel 支持应用级的...

2021-03-03 22:49:56 874 1

原创 C++程序度量驱动调优实例:看狄更斯的双城记,寻找性能瓶颈

作为一个专业的程序员,你写了一段程序,完成了一个功能,似乎达到了用户的要求,其实你心里也没底。做一个简单的测试, 跑了一个主要流程,基本的功能应该是满足需求的,但是性能呢?我们需要对程序的性能进行度量,确保性能是满足用户需求的。如果性能不理想,必需要找到瓶颈在哪里。最近在读狄更斯的小说《双城记》英文原版,既是学习英语,也是领略大师的行文。同时,我想知道大师喜欢用什么词,所以写了一个小程序来统...

2021-03-03 22:41:59 64 1

原创 WebRTC 之 MediaRecorder: 用你的浏览器录音和录像

既然现在的笔记本电脑,平板,手机都有摄像头和麦克风,那么录音和录像就是一件非常容易的事情了,但是如果不用别人写好的录音录像程序,让你自己来实现一个录音和录像应用,其实也没那么简单。但是有了 WebRTC 和支持它的浏览器, 事情就变得简单多了现代浏览器不仅支持 audio 和 video 两个新的元素,还支持了MediaStream 和 MediaRecorder 这样的媒体 API第一步:...

2021-02-27 16:38:24 968

原创 WebRTC 之 MediaStream: 用你的摄像头拍照

概述先看一下效果,你可以在这里亲自动手试试 https://www.fanyamin.com/webrtc/examples/media_stream.htmlWebRTC 中对媒体流 Media Stream 做了内置的支持,可以从电脑的摄像头,麦克风中捕获音频或视频流,并在 HTML5 所支持的 <video> 或 <audio> 或 <canvas...

2021-01-19 21:41:20 769

原创 接收方带宽估计的RTCP消息 REMB

1) WhatReceiver Estimated Max Bitrate (REMB) 提出了提出了一种RTCP消息,供在实验中使用, 它为基于RTP的媒体流部署了拥塞控制算法。它还描述了一个绝对值时间戳选项,用于带宽估计。该反馈消息用于通知一个在同一RTP会话上有多个媒体流的发送方, 通知它在该RTP会话的接收方路径上的总的估计可用比特率。在用于反馈消息的公共数据包头中(如[RFC458...

2021-01-05 15:55:06 1011

原创 C++程序员眼中丑陋的 JS

作为一个老程序员,长期工作在后端服务器的开发, 由于项目原因,最近会做一些前端 JavaScript 的开发,于是系统地学习了久违的 JavaScript, 第一感觉就是 Javascript 很丑陋。 当然,这是从一位老 C++ 程序员的角度来看 JavaScript , 所以觉的丑,而前端程序员可能看起来很美。就象一开始看着总想吐,吐着吐着就习惯了,这里总结一下 JS 的槽点1. 混乱的...

2020-12-14 11:14:21 124

原创 为什么需要发送和接收缓存

基于网络的应用程序都需要将接收到的数据先放入缓冲区,等一个数据包完整接收到了再传递给应用层。 大家都知道TCP是面向字节流的,发送方 send 了 n 字节,但接收方并不知道一次 read 操作收到了多少字节,可能是1,可能是n, 也可能是n-x 或 n+x (x 未知)。发送数据也是一样,一个数据包可能只发送了一部分,剩余的放在缓冲区中在 socket 端口可写时通过 on_write 回调函...

2020-10-23 19:21:41 909

原创 现代C++改变了什么

C 是一门古老的语言, C++在为C 引入了面向对象和泛型,也引入了许多的复杂性,例如多重继承,模板的特化,等等。同时 C++ 本身除了 STL 标准库,缺少高质量的并发和网络软件包,每个C++程序员或多或少都造过大大小小的轮子。例如我就写过很多 string 处理的函数, 比如 Trim, LowerCase, UpperCase, 等等,还有基于引用计数的智能指针,包装 pthread 函数...

2020-10-14 14:01:07 106 1

原创 最快的排序算法是什么

最快的排序算法是什么,很多人的第一反应是快排,感觉QuickSort 当然应该最快了,其实并非如此,快排是不稳定的,最坏情况下,快排序并不是最优,Java7 中引入的 TimSort 就是一个结合了插入排序和归并排序的高效算法.Timsort最早是 Tim Peters 于2001年为 Python 写的排序算法。自从发明该算法以来,它已被用作Python,Java,Android平台和GNU ...

2020-09-26 09:19:00 6880

原创 应用程序十二要点解读

应用程序十二要点是Heroku 所提出的一种用于构建软件即服务应用程序的方法学,参见 https://12factor.net, 解读如下使用声明性格式进行设置自动化,以最小化新加入项目的开发者的时间和学习成本;与底层操作系统之间保持简洁的契约,在执行环境之间提供最大的可移植性;适合在现代云平台上部署,避免对服务器和系统管理的额外需求;最小化开发和生产之间的分歧,实现持续部署以实现最大灵...

2020-09-25 22:59:57 83

原创 回顾 Reactor 模式

Reactor作为网络编程库的核心模式的 Reactor 模式是网络编程中的最常用的模式,反应器 Reactor 又名分派器 Dispatcher, 或通知器 Notifier, 重温一下 POSA2 是对这个模式的描述语境An event-driven application that receives multiple service requests simultaneously, ...

2020-09-14 13:54:30 50

原创 libevent 简介

看到一篇 libevent 的介绍文件,写得由浅入深,颇有趣味,随手翻译在此,并增加了一点 libevent 自身的介绍。原文来自http://www.wangafu.net/~nickm/libevent-book/01_intro.htmlThese documents are Copyright (c) 2009-2012 by Nick Mathewson, and are made...

2020-08-31 18:03:15 145

原创 如何做故障检测

最近在阅读 Accrual Failure Detector 论文及其网络上的分析文章,结合 Cassandra 源码,写了一点关于Accrual Failure Detector 的学习笔记,参考文章及链接附后,感觉到需要好好复习当年学过的概率论与数理统计。概述在分布式系统中,我们通常会在应用层做心跳检查,如果心跳消息在设定的周期中没有到达,就认为对端已经不可用了,可能crash掉了,或...

2020-08-27 21:37:15 1335

原创 通过 YAML 来生成思维导图

最近在读一本书 “Think Stats”, 中文名为“统计思维 - 程序员数学之概率统计”。这本书写得挺有意思,简单易读,而且名词解释很详尽,象是一本统计方面的小词典。这不,用 YAML 文件刚刚写了一点笔记。 YAML 文件应该是当下最流行的配置文件格式,兼有 JSON, XML, Properties, Ini 众多文件的优点。YAML 文件名为 statistic.yaml, 内容...

2020-08-02 16:48:52 371

原创 微服务缓存的使用度量

缓存也许是程序员心中最熟悉的性能优化手段之一, 在旧文中 微服务缓存漫谈之Guava Cache 和 Redis 集群的构建和监控 中分别介绍了最常用的本地内存的 Guava Cache 和远程的 Redis Cache. 这里我们重点聊聊缓存的度量。缓存的常见问题对于缓存,我们关心这几个问题:Cache hit ratio 缓存的命中率Cache key size 缓存的键值数量Ca...

2020-07-01 22:30:29 203

原创 Redis 集群的构建和监控

Redis 集群Redis 是 Remote Dictionary Service 远程字典服务,它在近年来风靡一时,不仅限于传统的 memcached 之类的缓存,还通过其丰富的数据结构支持许多其他的应用,比如少量数据存储,分布式锁,简单的 pub/sub 服务等等。当然单台 Redis 肯定不满足高可用性的要求,Redis 的 HA 方案主要有两种Redis Sentinel...

2020-06-13 12:32:31 302

原创 JVM 参数怎么调

基于 JVM 的语言和应用程序汗牛充栋,不仅限于 Java , 还有 Scala , JPython, JRuby。对于 JVM 的调优是每个JVM 应用开发者必需要了解的。先回顾一下 JVM 的结构JVM 结构JVM structure堆内部的分代年轻代 Young Generation: 一般分为伊甸园 Eden 和幸存区 Survivor(通过分为两个区S0, S1)...

2020-05-31 20:02:37 413

原创 微服务实战之 Cassandra 之二

书接上文 微服务实战之 Cassandra 之一, Cassandra 的优点说了不少,它的缺点大家也有所耳闻。作为一个 NoSQL 存储系统,它不支持多表连接,不支持外键约束,所以也不需要遵循数据库的经典范式。虽然 CQL 看起来很象 SQL,其实还是有点差别的,它的 Insert/Update 其实都是 Set, 它也不支持行级锁,不支持事务(它也有一种轻量级的事务,但由于它的分布系统特点...

2020-05-17 20:40:53 329

原创 程序员省钱大法 - 写脚本画图

在程序员的世界里,虽然别号码农,可是相当多的时间并不是在写代码,而是画图,谁叫人是视觉动物呢。在日常工作会经常绘制或阅读 UML中的那些类图,时序图,状态图,以及常用的框图,流程图, 和思维导图等,可用的工具也很多,比如 Visio, Gliffy, StarUml, XMind 等等,各有善长,有功能有限的免费产品,也有功能强大的收费产品。当然,我用的比较趁手的基本上都是要收...

2020-04-19 23:01:32 493

原创 线程池的监控与优化

多线程池是我们最常用的并行编程工具,多线程是性能优化在多核处理器时代是最常用的手段。而线程池是处理并发请求和任务的常用方法,使用线程池可以减少在创建和销毁线程上所花的时间以及系统资源的开销,解决系统资源利用不足的问题,创建一个线程池来并发的任务看起来非常简单,其实线程池的参数是很有讲究的。以 Java 为例,一个标准的线程池创建方法如下:/** Thread Pool Exec...

2020-03-27 22:31:05 815

原创 内存溢出不可怕,手足无措才尴尬

内存溢出错误简称OOM,也就是 Out Of Memory Error , 是Java中常见也是最严重的错误之一. C及 C++程序最烦人的内存泄漏和溢出错误,在Java程序中由于垃圾回收似乎已经不存在了,其实不然,它一直都在。前一阵子,产品线就出现了一个内存溢出的问题,结合实例,总结回顾一下此类问题的原因和分析方法。1. 原因先来看看 Java 所使用的内存空间,Java虚...

2020-01-27 15:39:24 386

原创 MetricBeat 快速上手

MetricBeatwget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.4.1-linux-x86_64.tar.gztar xvfz metricbeat-7.4.1-linux-x86_64.tar.gzvi metricbeat.yml编辑 metricbeat.yml ...

2019-10-28 22:25:01 359

原创 微服务之性能测试

性能测试怎么做? 什么性能测试工具最称手?仁者见仁,智者见智。性能测试的目的是为了充分了解系统及服务所能承受的最大容量是多少,有无性能瓶颈?如果有性能瓶颈,瓶颈在哪里?最重要的有三点:1)响应时间2)吞吐量3)成功率1. 协议层面的考量以最常用的 HTTP 协议, 我们要看如下要点:响应码(Response code)响应码代表了 HTTP RES...

2019-10-28 21:37:13 1513

原创 Ansible 快速上手

三部曲1. 安装先安装 python3, 然后通过 pip 来安装sudo easy_install pipsudo pip install paramiko PyYAML jinja2sudo pip install ansible或者用系统自带的包管理工具来安装centos: yum install ansible -yUbuntu: apt install ...

2019-10-26 23:39:39 79

常用编码查询软件工具

自己用VC6写的一个简单好用的编码转换工具,支持crc32,md5,以及base64, html , url encode/decode

2008-04-28

时区转换工具

自己用java 写的一个非常简单好用的时区转换工具,可以将日期时间从任意一个时区转成另外一个时区的日期时间

2008-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除