自定义博客皮肤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

  • 博客(156)
  • 资源 (2)
  • 论坛 (6)
  • 收藏
  • 关注

原创 如何创建 WebRTC 会话二

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

2021-03-21 20:31:10 3

原创 WebRTC 之 SDP

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

2021-03-10 22:38:35 19

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

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

2021-03-04 22:16:55 30

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

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

2021-03-03 22:49:56 55

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

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

2021-03-03 22:41:59 10

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

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

2021-02-27 16:38:24 55

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

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

2021-01-19 21:41:20 121

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

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

2021-01-05 15:55:06 38

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

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

2020-12-14 11:14:21 37

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

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

2020-10-23 19:21:41 149

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

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

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

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

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

2020-09-26 09:19:00 685

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

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

2020-09-25 22:59:57 25

原创 回顾 Reactor 模式

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

2020-09-14 13:54:30 12

原创 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 55

原创 如何做故障检测

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

2020-08-27 21:37:15 167

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

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

2020-08-02 16:48:52 111

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

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

2020-07-01 22:30:29 101

原创 Redis 集群的构建和监控

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

2020-06-13 12:32:31 107

原创 JVM 参数怎么调

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

2020-05-31 20:02:37 118

原创 微服务实战之 Cassandra 之二

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

2020-05-17 20:40:53 142

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

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

2020-04-19 23:01:32 242

原创 线程池的监控与优化

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

2020-03-27 22:31:05 327

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

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

2020-01-27 15:39:24 217

原创 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 254

原创 微服务之性能测试

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

2019-10-28 21:37:13 706

原创 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 54

原创 微服务协议之RTP

为满多媒体应用传输实时数据的需要, IETF RFC 3550 定义了实时传输协议RTP: A Transport Protocol for Real-Time Applications 即为实时应用程序所定义的传输协议, 它为交互式音频和视频聊天和会议应用提供端到端的传输服务.解决的问题让我们先想想实时传输需要解决哪些问题:顺序 Sequence多媒体数据包需要保序, ...

2019-08-18 11:27:31 100

原创 JWT

JWTJWT: Json Web TokenJWS Json Web SignatureJWE: Json Web EncryptionJWT是一种在双方之间传输的紧凑的,URL安全的令牌表示方式JWT 表示为编码的 JSON 对象, 可用于 JWS 的的负载, 或者 JWE 的明文签过名的 JWT 称 JWS加过密的 JWT 称 JWE最终的 JWS 形为 ${H...

2019-06-16 15:21:04 47

原创 机器学习数据集之泰坦尼克

泰坦尼克号乘客数据集和鸢尾花数据集一样, 是机器学习中最常用的样例数据集之一下载数据集登录 https://www.kaggle.com , 在帐户页面中https://www.kaggle.com/walterfan/account 页面上选择 "Create API Token" , 下载 kaggle.json文件内容为{"username":"$user_name...

2019-06-01 08:09:52 283

原创 微服务之断流

我们每个人应该都对保险丝很熟悉, 熔断器也是类似的设备, 一旦电流过载,电压异常,保险丝熔断, 电路就会自动断开, 从而保护电器和设备。受此启发, 熔断器模式在微服务的设计中也大行其道。 微服务在分布式系统中, 多个微服务之间是存在诸多依赖关系, 当其中一个服务出现故障, 很可能会拖累整个系统. 一个微服务多数情况既会被其他微服务依赖, 也会依赖其他的微服务一起协同...

2019-05-28 21:33:14 220

原创 微服务之限流

回想我们在银行和政府机关去办事时, 都会有一个排队机, 先取一个号, 然后等待叫号, 办事窗口多, 号就叫得快, 办事窗口少, 号就叫得慢, 排队机是一个了不起的发明, 这里有许多值得我们在编程时借鉴的东西。排队机它其实应用了 leader/follower 的并发模式, 每个办事窗口就是一个工作线程, 由排号机这个 leader 来分配工作它其实应用了限流模式...

2019-05-27 21:17:59 206

原创 事件溯源和命令和查询责任分离模式

Achievement provides the only real pleasure in lifeCRUD模式在 Web Service 中我们一般分为三层:ControllerServiceRepository而作用于这三个层次的对象有:DTO (Data Transfer Object) 数据传输对象BO (Business Object or D...

2019-03-09 22:08:58 93

原创 命令和职责链模式的快速实现 commons chain

commons chain 是命令与职责链模式的经典实现 commons chain基本概念它有如下概念:ContextCommandChainFilterCatalog1) Context 上下文Context 表示一个应用程序的状态, 它其实是一个 java.util.map 的标记接口, 上下文是类似一个信封, 包含了完成一个事务所需的属性, 换句话说,...

2019-03-08 15:59:39 128

原创 如何定义和实现流程

很多程序员在上大学的时候都学过如何画流程图, 或根据流程写代码, 或者根据代码写流程图.来让我们看看如下的流程, 我们用 www.plantuml.com 所提供的工具绘制如下语音交互应答, 所对应的场景是打电话查询帐户余额ivr_flow_sample.txt:@startumlstart# 播放欢迎音乐:play_prompt({"clip":"welcome_...

2019-03-03 23:02:38 162

原创 日志分析之ELK

所谓ELK 是指 Elasticsearch, Logstash, Kibana 这三个开源日志收集, 分析和展现工具.ElasticSearchElasticsearch简称 ELS , 它是ELK 技术栈中的核心组件,它是基于 Apache Lucene 的一个高度可扩展的开源全文搜索和分析引擎。 它可以快速,近实时地存储,搜索和分析大量数据。 它通常用作底层引擎/技术,为...

2019-02-26 11:14:09 45

原创 微服务之 Spring Boot

Spring Boot 项目是 Spring 大家族的后起之秀, 它通过内置的 Tomcat/Jetty, 可以创建独立的Spring 程序, 无需依赖于 web 容器自动配置, 封装一些 starter 依赖库, 大大简化了以往繁琐的依赖配置, 无需代码生成,无需编写一行 xml 配置文件内置了产品级的度量和健康检查工具 actuator, 可用 yaml/prope...

2019-02-23 23:34:07 31

原创 为你的股票绘制趋势图

手里有一点点公司的股票, 拿不准在什么时机抛售, 程序员也没时间天天盯着看,不如动手写个小程序, 把股票趋势每天早上发到邮箱里,用 python 的 pandas, matplotlib 写起来很容易, 几十行代码搞定。准备环境python3 -m venv venvsource ./venv/bin/activatepip install pandaspip insta...

2019-02-16 19:28:35 718

原创 微服务数据库与 NOSQL 选型

传统单体应用典型的架构是几点个应用程序服务器, 连接后台的 Oracle 或 MySQL 服务器, 彼此之间也可以使用数据库来共享数据. 随着业务的增长, 后台数据库会变得越来越庞大, 不得已进行分表分库, 不同的租户或应用使用不同的数据库和表. 由于数据共享的要求, 经常还要做一些数据复制.比如一些公司都会有一个集中式的系统配置数据库 Config DB, 为了在各个集群中可以...

2019-02-08 20:43:08 89

原创 微服务 REST API 设计原则

REST API 设计原则REST API 的设计很有讲究,我司总结了一些规范和原则,详见 Cisco REST API 规范,编译如下:REST 方法GET 方法的响应是由所请求URL代表的资源的表示GET 方法不会改变请求URL所代表的资源POST 请求在所请求的URL 路径下创建一个新的资源以作为叶子节点POST 响应体或者为空(响应状态码为204...

2019-02-08 19:27:34 162

时区转换工具

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

2008-04-28

常用编码查询软件工具

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

2008-04-28

空空如也

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

TA关注的人 TA的粉丝

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