- 博客(11)
- 收藏
- 关注
原创 记一次IETF QUIC无法使用0-RTT的原因排查
1. 背景 截止目前,IETF QUIC最新版本已至draft-29。chromium官方也放出消息说正在加大部署IQUIC。IQUIC成为未来的QUIC标准,这促使我们去关注IQUIC的各种特性。0-RTT可以提高建连的速度。但是在实际测试IQUIC时,我们发现GQUIC可以正常启用0-RTT,但是IQUIC却始终无法生效。2. 分析客户端测试工具:1) google quiche的quic_client2) chrome浏览器: stable和canary0-...
2020-10-20 20:14:15
1565
5
原创 关于同名宏定义和变量的定义的一些思考
问题描述:在chromium项目中进行开发,子项目使用了rsyslog来进行日志读写,项目中有直接依赖的地方会间接依赖chromium的logging模块,具体是在base/logging.h中。rsyslog使用的日志级别LOG_INFO和LOG_WARNING与chromium的logging中定义的日志级别发生了同名冲突。我们在代码的地方,选择使用rsyslog的LOG_INFO而非logging。具体表现为:rsyslog用宏定义,logging用变量。我们在编译项目时始终无法编译通过。总是报如
2020-09-21 21:19:20
1165
1
原创 当chromium遇见prometheus-cpp
1. 背景最近基于chromium开发QUIC时,需要支持带宽统计的特性。经过调研发现了一个第三方库,即prometheus-cpp。于是便有了在chromium编译QUIC服务时依赖prometheus-cpp的需求。起初,按照prometheus-cpp提供的编译方法,使用cmake编译出了动态库(主要会使用到libprometheus-cpp-core.so和libpromemtheus-cpp-push.so)。但是在进一步chromium编译的时候,出现了很多undefined symbol的
2020-07-17 19:56:34
989
原创 关于git rebase的几点思考
平时使用git rebase这个命令的机会并不多,直到最近有需要合并给git commit log的需求时,使用到了git rebase命令。现在特地把一些关键的个人感受记录在下面,以供日后参考。合并多条commit log方法在搜索引擎上面都可以搜到。简单来说就是先执行:git reabse -i [commit-id]commit-id是最后一个需要合并的记录的...
2020-04-15 18:45:52
190
原创 nginx反向代理模块解析status line过程分析及启发
最近在研究nginx反向代理模块的相关源码。在阅读源码的过程中,发现了一个有意思的函数:ngx_http_parse_status_line这个函数是反向代理模块在从upstream机制中读到上游发来的响应头部数据之后,调用自身的process_request后执行的。反向代理模块在进行初始化时,会将u->process_headers赋值给ngx_http_proxy_proce...
2019-11-05 21:52:18
402
原创 golang单元测试总结
命名规则: xxx_test.go关于测试文件的存放位置,常见的做法实际上是和源代码放在一起假如需要测试的有两个功能函数:GetData()ReadData()单元测试时,可以将测试单元TestGetData以及TestReadData放在同一个文件中,也可以将它们放在不同的文件中。为了测试方便,采用将它们放在同一个文件中这种处理方法。假如该文件名为:get_func...
2019-05-22 17:54:15
448
原创 node.js——在函数中返回另一个函数的一个目的
在阅读node.js项目源代码的时候,发现某个变量的定义如下:var example = function(){ var _id = 1; return function(){ if (_id === 9007199254740992) { _id = 32768; } return _id++;
2017-09-01 10:47:23
1521
原创 由static关键字引发的知识点学习和在类中的使用相关注意事项
第一部分(static在类中的应用以及相关例外情况)比较基础的是:在类中如果定义了static静态数据成员,在类中声明,但是在定义时需要在类外,而不能使用构造函数。比如://test.hclass test {private: static int num;……在类实现文件中,给出定义和初值://test.cp
2016-08-05 22:30:05
357
原创 Linux shell脚本:数学运算的三种方式
习惯于写C/C++程序时,使用大量空格使程序变得美观的程序员,在编写shell脚本的时候,会产生一些别扭的情绪。比如,通常在C/C++中,我们习惯这样写:int i = 0;等于号两边有空格,看起来更舒服。实际上这是一种编程习惯而已。但是在shell脚本编程的时候,尤其要注意一个事情,不说废话,看代码:#!/bin/bashdate_before=$(date +%s)
2016-08-04 21:41:45
2406
原创 定义和声明以及extern、static关键字
1. 定义只能进行一次,声明可以多次。2. 变量定义是为变量分配存储空间,也可以初始化,不初始化的定义如:int i;3. 声明是表明变量的类型和名称,因此定义也是声明。4 . 没有初始化的时候,有extern表示这是声明,不是定义,不分配存储空间,如:extern int i;5. 但是如果有初始化时,即使加了extern也是定义,如:extern int i =
2016-07-24 16:53:14
2319
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人