- 博客(52)
- 收藏
- 关注
原创 最长子序列
#include <vector>#include <iostream>using namespace std;int main(){ constexpr int num = 8; int a[num] = {1,7,8,4,3,2,5,6}; std::vector<std::vector<int>> result[num]; ...
2018-09-25 15:18:55
312
原创 负载均衡方案概述
1. 第一阶段 (PV百万-千万) 利用Nginx或HAProxy进行单点的负载均衡。 阿里云提供的是5万QPS。也就是可能支持日活百万。(或更多) nginx+keeplived/HAProxy+keeplived主从热备。 多机器可使用DNS轮询。 后台多服可使用一致性哈希作为负载均衡算法。2. 第二阶段: (PV千万-亿) 基于上一阶段。...
2018-09-10 15:29:48
341
原创 网络协议简单入门
应用层:自定义 用于用户自定义传输数据运输层:TCP/UDP UDPUDP保证数据是最正确无误的。但是无法保证数据是顺序,不丢失的。 TCPTCP是可靠的,不丢失,顺序的。 网络层...
2018-09-04 11:44:35
615
原创 docker swarm
0. swarm简介 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。 可参考这篇博客: https://www.cnblogs.com/frankniha...
2018-09-03 20:16:54
281
原创 docker 快速入门
0. docker简介:Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。1. docker 安装curl -fsSL get.docke...
2018-09-03 17:59:56
363
原创 share_lock实现
C++17 才支持share_lock。低版本的需要自己实现。以下基于C++11实现。源码的地址:https://github.com/SaberMqd/naive/blob/master/include/naive/share_lock.h #ifndef _NAIVE_SHARE_LOCK_H_#define _NAIVE_SHARE_LOCK_H_#ifdef _W...
2018-09-03 11:00:39
1300
原创 简单的工作线程实现
源码链接:https://github.com/SaberMqd/naive/blob/master/include/naive/work_thread/work_thread.h原理:new thread( //开启一个线程 while(true){ //无限循环 wait(task) 等待任务 if(ove...
2018-09-03 10:47:01
583
原创 读写安全的ringobjbuffer。 可用于做简单的任务队列。
源码地址:https://github.com/SaberMqd/naive/blob/master/include/naive/ring_object_buffer.h需要C++11支持。#ifndef _NAIVE_RING_OBJECT_BUF_H_#define _NAIVE_RING_OBJECT_BUF_H_#include <cstdint>#inclu...
2018-09-03 10:34:55
293
原创 ringbuf
读写安全的环状buffer。源码链接:https://github.com/SaberMqd/naive/blob/master/include/naive/ring_buffer.h#ifndef _NAIVE_RINGBUF_H_#define _NAIVE_RINGBUF_H_#include <cstring>#include <cstdint>...
2018-09-03 10:31:46
334
原创 更安全的std::condition_variable
原生std::condition_variable的notify() 和 wait()有以下特性:1. 仅支持简单的消息等待和消息发送。2. 当notify()后于调用wait()的时候,消息会丢失,wait()阻塞。3. 当wait()接收到一次notify()之后,就再也不会阻塞。 由于我们的业务所需。实现以下功能:1. 当notify()后于调用wait()的时候,...
2018-09-03 10:16:38
259
转载 Google/Mock
本文引用自http://www.tuicool.com/articles/n26rMvy对于 c++ 来说写单元测试和 mock 框架不是一件容易的事情。还好, Google 为我们搭建了一个出色的单元测试和 mock 框架。网上的例子很多都过多强调概念,本文用一个简单的例子让大家对于什么是 gtest 和 gmock 让大家有一个直观的了解,让大家很快上手,就像写 hello word
2017-01-19 11:00:58
604
原创 Google/gtest
简介:gtest是一个跨平台(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)的C++测试框架,有google公司发布。gtest测试框架是在不同平台上为编写C++测试而生成的。编译:下载代码:https://github.com/google/googletestwindows:在googletes
2017-01-19 11:00:15
516
原创 Google/glog
glog简介:google 出的一个C++轻量级日志库,支持以下功能:◆ 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;◆ 严重性分级,根据日志严重性分级记录日志;◆ 可有条件地记录日志信息;◆ 条件中止程序。丰富的条件判定宏,可预设程序终止条件;◆ 异常信号处理。程序异常情况,可自定义异常处理过程;◆ 支持debug功能;◆ 自定义日志信息;
2017-01-19 10:59:38
750
原创 webrtc实现即时语音通讯开发小结(native)
对于不同的业务需求,我们可以分为以下四层路线开发。1.peerconnection2.voe3.apm4.aecm,aec,agc,ns,vad
2016-12-21 09:50:35
3081
原创 类成员函数作为线程参数的用法
1.传统用法: void RunThread(); std::thread* _runThread = new std::thread(std::mem_fn(&LarkVoice::RunThread), this); _runThread->detach();2.lambda用法:std::thread *_runThread = new std::thread( [=]
2016-12-16 10:49:44
791
原创 C++ 宏定义禁止复制构造函数和赋值函数
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&){} \ void operator=(const TypeName&){};
2016-12-13 15:47:53
1633
原创 C++ 安全释放模板
#ifndef _SAFE_DELETE_H_#define _SAFE_DELETE_H_namespace safe_delete{ template void SafeDelete(T *&t){ if(t) { delete t; t = nullptr; } } te
2016-12-13 15:44:24
627
原创 const和指针搭配时的作用范围
const其实就是为了保证它所描述的变量不能被修改。直接用代码说明,以下代码仅仅为了证明const和指针在一起时候的作用范围:1.*pfloat *p;p = 3;*p = (float*)3;const float* p;*p = 3; //这样不行p = new float[3];//这样可以证明const type * 是指针能
2016-11-25 14:10:48
461
原创 apt-get安装,卸载,更新
apt-get install xxxx 安装apt-get remove xxxx 卸载但不删除配置apt-get purge xxxx 卸载并且删除相关配置apt-get updata更改/etc/apt/source.list把jessle都改成testing就可以用最新的软件。
2016-11-07 13:22:17
1313
原创 go安装leaf
go安装leaf安装的时候使用go get发现控制台没有任何显示进度。所以可以用后面的那个链接下载。我是追出来的这个链接。其实go get 就是 git clone到本地。如果觉得git慢的话,可以先迅雷下载到本地,再上传上去,放在需要的目录下面。
2016-11-03 15:34:29
2351
原创 Linux文件夹高亮
vim ~/.bashrc修改如下,可以满足一般要求 # ~/.bashrc: executed by bash(1) for non-login shells.# Note: PS1 and umask are already set in /etc/profile. You should not# need this unless you want differen
2016-11-03 10:29:29
2579
原创 webrtc音频限制带宽
我们使用webrtc的时候遇到过带宽占用太高的问题。查看别人的博客也发现他们的项目一般都是支持一个服务器5到6人的语音。这是成本太高的问题。其实webrtc自己是可以设置这些的。 仔细阅读webrtc的源码,我设置如下的参数,使得带宽减少了一半多。一个5M服务器可以支持近30人。
2016-11-02 15:35:56
2311
原创 webrtc声音回声消除算法选择
使用webrtc的时候,很多声音相关算法没有选择的话,是使用的webrtc默认的算法。在国内的手机,比如小米,魅族等,可能会出现相反的效果。一切的设置都在webrtc-master-webrtc\api\mediaconstraintsinterface.cc这个文件里,无论安卓调用,还是C++,都在添加本地媒体的时候设置:
2016-11-02 15:28:42
8469
4
原创 webrtc简单介绍以及用法(native)
本文不适合JS调用方法,但是可以参考,原理大同小异。适用于JAVA,OC,C++。其实也就是相关平台WINDOWS,IOS,android,linux。官方的接口和使用流程如下:https://webrtc.org/native-code/native-apis/可能有些难以看懂。那么可以先看我的使用方法,再回去看官方文档。先介绍webrtc,其实他是一个客户端
2016-10-25 16:11:07
5387
1
原创 coturn 命令
以下是引用自README.TURNSERVER,官方自带的文档。WEBRTC简单的例子:配置config: 1 listening-device=eth0 2 listening-port=3478 3 relay-device=eth0 4 Verbose 5 lt-cred-mech 6 min-port=49152 7 max-por
2016-10-25 10:01:01
5042
原创 webrtc-房间服务器搭建
apt-get updateapt-get install gitgit clone https://github.com/webrtc/apprtcapt-get install nodejsapt-get install npmnpm install -g npmapt-get install nodejs-legacynpm -g install grunt-cl
2016-10-19 11:28:49
1968
原创 webrtc-信令服务器搭建
下载webrtc源码:git clone https://github.com/webrtc/apprtc安装依赖的golang环境。apt-get install golang-gomkdir collider_rootvim /etc/profileexport GOPATH="/root/collider_root/"source /etc/profile
2016-10-19 11:23:59
3865
原创 turn 搭建
coturn 的底层网络部分依赖libevent. 所以需要先安装libevent2,在这里下载http://libevent.org/ 安装: ./configure make make verify sudo make install具体说明在README中。安装coturnhttps://github.com/coturn/co
2016-10-19 10:57:10
676
原创 webrtc源码浅析-scoped_ref_ptr
scoped_ref_ptr 是个简单的智能(根据引用数量延迟销毁,不会多次重复new,节省开销)指针,多线程安全(使用_sync_fetch_and_add比加锁要高效的多)。
2016-09-28 11:04:25
2031
原创 skyrtc demo
以下网上别人写的基于webrtc的DEMO.用于测试还是可以的。chrome浏览器终于出现ssl的问题。建议使用手机测试。就是自己部署下面这个例子,这个部署很简单。https://github.com/LingyuCoder/SkyRTC-demogit clone https://github.com/LingyuCoder/SkyRTC-demo.git解压后n
2016-09-21 16:19:59
3572
1
原创 NSIS + QT 做安装卸载程序
NSIS + QT 做安装卸载程序。NSIS仅仅用于把所有的东西封装为一个EXE。NSIS打包QT做有逼格的可视化界面,并且方便实现。以下是nSIS源码:icon ".\xxx.ico" #设置图标OutFile "setup.exe" #设置生成程序SilentInstall silent #静默安装不出现任何NSIS自带界面F
2016-09-20 15:49:14
6363
2
原创 protobuf for lua 实现
protobuf for lua代码里面包含了C++反射处理protobuf,C++构造Lua表,C++读取Lua表,C++静态处理protobuf。大端,小端的short转换为字节。经过测试,代码稳定。
2016-09-19 16:11:12
1503
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人