- 博客(30)
- 资源 (3)
- 收藏
- 关注
原创 HTTP/3系列-QUIC包头保护
包头保护是QUIC(RFC9000)的一个特性,说白了就是对每个包的包头所有bits,加密能加尽加,注意是能加尽加,不是所有bits都加密。这一点跟google quic(下文简称GQUIC)是不同的,GQUIC的包头是不加密的。本文将结合RFC和chromium中具体实现代码,详细解答以下三个问题:1、为什么要做包头保护?2、怎么做包头保护?3、发送端第一个Initial Packet加密,此时还未协商密钥,接收端怎么解密?
2021-12-05 21:41:59
3389
原创 wrk批量压测:一次压测多个http/https url
wrk是个很好的http/https压测工具,同时也支持通过lua脚本一次发多个url测试,详见githubhttps://github.com/timotta/wrk-scripts。但是这个脚本有一个bug,需要改一下,才能运行正常。修改后的代码如下://counter = 0counter = 1-- Initialize the pseudo random number generator - http://lua-users.org/wiki/MathLibraryTutorialma
2021-01-14 09:24:54
1846
2
原创 libgd图片格式转换:PNG转JPEG背景变黑的解决方法
使用libgd将PNG转JPEG直接上代码:gdImagePtr loadImage(const char *name) { FILE *fp; gdImagePtr im; fp = fopen(name, "rb"); if (!fp) { fprintf(stderr, "Can't open png file\n"); return NULL; } im = gdImageCreateFromPng(fp); fclose(fp); return i
2020-12-19 21:14:22
1435
1
原创 centos中编译http3的压测工具h2load
h2load可以压测http3,其编译详见https://github.com/nghttp2/nghttp2/tree/quic。官方的编译方法应该在ubuntu上很ok,在centos中编译的有点不顺畅,下面将遇到的一些坑及其解决办法详细描述一下。1、安装gcc 8等依赖编译ngtcp2需要gcc >= 8.0,简单的安装方法如下:yum install centos-release-sclyum install devtoolset-8-gcc devtoolset-8-gcc-c++
2020-06-12 11:27:48
2369
1
原创 nohup后台运行perf top脚本持续监控CPU
背景和问题某个线上进程偶尔突发短暂的CPU 100%导致一些问题,这个问题是间歇性的,为了捕捉CPU 100%时的现场,想写个脚本通过perf top持续监控。脚本很简单,主要一行:sudo perf top >> perf.data前台执行这个脚本正常。但是线上机器,必须要后台运行,但是使用nohup + &,脚本执行异常:perf top每秒钟N次刷新,捕捉到的都是无...
2020-04-14 21:29:05
1223
原创 记一次程序coredump在stl unordered_map find函数
程序调用unordered_map find导致coredump程序定义了一个unordered_map对象来保存一些信息,运行起来coredump了,gdb看堆栈,很莫名其妙,coredump的地方是在调用标准库unordered_map的find函数:Program terminated with signal 11, Segmentation fault.#0 0x00000...
2018-08-26 09:18:59
9954
原创 mysql错误:this authentication plugin is not supported
this authentication plugin is not supported应用程序连接mysql docker一直报错:this authentication plugin is not supported。 google发现,原来是mysql新版本(8.0以上)将root用户使用的plugin更新成caching_sha2_password。 登录mysql输入如下命令可以看...
2018-05-24 11:53:09
14819
原创 记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST
问题描述这两天用Go做一个比较简单的task:后端有HTTPServer和TCPServer。客户端通过http接入到HTTPServer,HTTPServer通过RPC将请求发送到TCPServer,所有的业务逻辑都由TCPServer处理。压测:自己的mac电脑(CPU:Intel i7, 4核,2.7GHz。内存:16G),硬件够用。客户端用Go编写,1个goruntine启...
2018-05-13 17:37:40
28268
原创 select case break引发的血案
最近线上一个模块有内存泄漏,加了http pprof后,发现goroutine一直在增长,怀疑是goroutine泄漏导致的内存泄漏。于是死看代码,发现以下代码片段可能存在问题://goroutine...for{ select { case ... ... case ... ... case
2018-03-20 13:15:57
8140
3
原创 6位全局唯一随机邀请码实现方式
很多APP都会为每一个用户生成一个邀请码,用以奖励用户邀请其他人下载注册使用该APP。例如之前的Uber邀请码、现在的西瓜视频邀请码、各种虚拟货币邀请码等等。这些邀请码多是5位或者6位数字和字母的组合,实现中,每一个用户固定一个邀请码,也就是说邀请码全局唯一。且邀请码没有特定的规律,看上去是随机生成的。那么这些邀请码具体是怎么实现的?邀请码实现方式我没有做过邀请码类似项目,所以我能想到
2018-01-11 15:35:55
40400
5
原创 GO 语言websocket编程
GO提供原生的websocket API,使用时go get然后引用即可 golang.org/x/net/websocket 使用起来也很方便,直接上代码吧。一个echo server的代码package mainimport( "golang.org/x/net/websocket" "fmt" "net/http" "flag")type WSServer
2017-12-19 18:18:52
8485
原创 GO通道chan
chan用于goroutine间的通信1、基础有缓冲通道和无缓冲通道无缓冲通道:make(chan int) 有缓冲通道:make(chan int, 5)无缓冲通道会导致发送和接收的goroutine同步化主要体现在如下两点: - 无缓冲通道会使发送goroutine阻塞,直到对应的chan上有接收者package mainimport (
2017-12-12 20:31:41
975
原创 不要通过共享内存来通信,要通过通信来共享内存
“不要通过共享内存来通信,要通过通信来共享内存”,这句话是GO社区中非常经典的一句话,但是我们如何理解这句话呢? GO语言的协程(goroutine)是从进程、线程基础上发展而来的,它比进程线程更轻量级,但是都是为并发而生。既然是并发,那么不可避免的会有多个不同并发实体之间传播或者交换信息,也即通信。要理解“不要通过共享内存来通信,要通过通信来共享内存”这句话,我们得从跟进程线程间通信的比较来了解
2017-12-12 19:29:43
5818
2
原创 命令行解析:flag
一般使用在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。Go的命令行参数解析通过flag包实现,先看下面这个例子,假设我们实现了一个server,启动这个server的时候需要指定监听的tcp地址(例如:127.0.0.1:1314)、配置文件、监听的http地址(例如:127.0.0.1:6666)。启动命令如下: ./server -tcpAddr 127.0.0.1
2017-12-12 19:27:01
1980
原创 切片(slice)
切片是动态数组,比数组灵活。数组长度不可变,但是切片可以追加。 切片原型定义如下:struct Slice{ byte *array; unit32 len; unit32 cap;};它抽象为以下三个部分: 1. 指向被引用的底层数组的指针; 2. 切片中元素的个数; 3. 切片分配的存储空间。声明、定义和初始化声明一个切片:var sliceTest []int声明的切片
2017-12-12 19:24:37
1098
原创 log4cpp编译安装
下载代码官网log4cpp下载 或者git下载 git clone https://git.code.sf.net/p/log4cpp/codegit log4cpp-codegit编译安装以centos下git下载代码为例cd log4cpp-codegit/ ./autogen.sh ./configure makemake checkmake install安装完成后,头文件
2017-01-25 12:09:15
1168
原创 resiprocate-repro编译和运行
下载代码git clone https://github.com/resiprocate/resiprocate下载编译依赖resiprocate依赖包包含但不限于以下: automake autoconf libtool openssl-devel boost-devel asio-devel db4-devel centos上执行以下命令: yum install gcc-c+
2017-01-19 20:17:32
3446
原创 resiprocate使用入门:内网搭建基于repro的sipproxy测试环境
测试环境sipproxy:repro + centos 客户端:windows电脑客户端使用X-Lite,手机andriod客户端使用linphonerepro配置和启动log的配置如果使用默认的log配置,则log级别是INFO,且所有log都打印到标准输出。如果要输出到文件,则做如下类似配置: #################################################
2017-01-19 20:07:19
4840
原创 SO_REUSEPORT使用示例
SO_REUSEPORT使用示例最近计划对之前写过的后台多线程服务器重构,其中涉及到并发模型,之前是一个listener线程+N个worker线程,即用一个线程监控tcp端口,来了请求,accept一个新的socket后,丢给后面的worker线程池去处理。现在想用Linux内核支持的SO_REUSEPORT特性,减少listener线程跟worker线程之间的锁,同时去掉listener线程。示例
2016-06-20 16:50:41
13515
2
转载 C/C++ Volatile关键词深度剖析
本文转载自 http://hedengcheng.com/?p=725背景前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议): 此微博,引发了朋友们的大量讨论:赞同者有之;批评者有之;当然,更多的朋友,是希望我能更详细的解读C/C++ Volatile关键词,来佐证我的微博观点。而这,正是我写
2016-05-24 14:42:15
1384
1
原创 分布式文件系统介绍
1分布式文件系统的一些概念分布式系统:分布式系统是指利用多台计算机协同解决单台计算机所不能解决的计算、存储等问题。分布式系统分两种:分布式存储和分布式计算。分布式存储主要有分布式文件系统和分布式数据库。分布式文件系统主要是用于文件存储。互联网上的所有资源,最终都会以文件的形式存放在具体的物理机器的存储设备上。存储、读取和管理这些海量的文件依靠单一的机器无疑是不行的,所以分布式文件系统应运而生。
2016-01-05 18:13:05
6968
1
原创 C++构造函数与析构函数总结
Author:阿冬哥Created:2013-4-20Blog:http://blog.youkuaiyun.com/c359719435/Copyright 2013 阿冬哥 http://blog.youkuaiyun.com/c359719435/使用以及转载请注明出处1 构造函数和析构函数 构造函数和析构函数是C++中面向对象的基本概念,每本教科书
2013-05-03 19:04:49
661
转载 [转载]Redis能干啥?细看11种Web应用场景
转载:http://blog.nosqlfan.com/html/2235.htmlRedis作者谈Redis应用场景作者:nosqlfan on 星期二, 六月 28, 2011 · 5条评论 【阅读:12,930 次】 毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在
2013-04-20 21:09:39
668
原创 内存池创建以及使用
Author:阿冬哥Created:2013-4-18 Blog:http://blog.youkuaiyun.com/c359719435/Copyright 2013 阿冬哥 http://blog.youkuaiyun.com/c359719435/使用以及转载请注明出处1 内存池 内存池是一种内存分配方式。一般我们习惯用new\malloc在需要使用内存时分配内存,这
2013-04-20 18:08:26
928
原创 socket tcp缓冲区大小的默认值、最大值
Author:阿冬哥Created:2013-4-17 Blog:http://blog.youkuaiyun.com/c359719435/Copyright 2013 阿冬哥 http://blog.youkuaiyun.com/c359719435/使用以及转载请注明出处1 设置socket tcp缓冲区大小的疑惑 疑惑1:通过setsockopt
2013-04-17 19:27:41
40519
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人