记录一个网络库设计的bug
今天遇到一个设计上没考虑好的问题,记录一下。
之前Libeasy的逻辑如果一个连接上有超时的报文的话,整个连接会destroy掉。考虑网络拥塞的情况,如果AB两个报文同时在等待发送,A报文先进入发送队列(链表,非TCP发送buffer),B后进入,而A超时时间长,B立即超时,那么清理掉B的待发送报文的时候,如果destroy掉连接,那么本来可以发送出去的A报文就被强制失败了。
考虑这种情况做了一点修改,让超时的报文被清理掉的时候不会destroy连接。这样编码的时候需要指定一个报文被编码出来的buffer是属于哪个会话(session)的,同时记录一下每个session对应的最后一个buffer位置。清理的时候可以从上述位置回溯到不属于当前session的buffer或者到头部为止...
关于最近的一些事情
最近其实是乏善可陈的,项目差不多写完,修修补补,提升下性能。其他的事情诸多不顺,看房价蹭蹭的涨,看工资慢慢的爬,感情纠结一团,其他的么,牙疼,估计牙周炎犯了。
然后今天炎泼说要走了,陈闯二话没说也跟着走了,先知先觉的后知后觉的都有各自的想法,只是我比较懵逼,可能最近事情多了,精力都不在这上面。每个人有自己的选择,目前看互联网差不多进入稳定期了,风口还有,但是能飞起来的猪不多了,剩下的人,要么在大公司朝九晚五,要么在创业公司等期权等上市,少数人还追求着理想,不过最后如果没有回到前面两个状态的话,一般是创业去了。
工作几年觉得介于目的性明确和不明确之间吧。做技术的明显分了两派,以KPI为核心的和以兴趣为核心的,很多时候这两个不是不兼容的。目的明确的,一切跟个人发展不相关的都推掉,目的不...
go生成xml的时候特殊字符转义的问题
最近在做http返回的时候发现go的xml生成(marshal)会把引号转义,如下:
<?xml version="1.0" encoding="UTF-8"?>
<Part>
<PartNumber>1</PartNumber>
<LastModified>2016-03-18T08:24:25.000Z</LastModified>
<ETag>"0c78aef83f66abc1fa1e8477f296d394"</ETag>
<Size>12121</Size>
</Part>
...
vim编译错误:PyUnicodeUCS4_AsEncodedString
换了个ubuntu的环境想编译一下vim,为了防止不兼容手动编译了python2.7,之后把改过的vim源码放上去编译发现有问题:
undefined symbol: PyUnicodeUCS4_AsEncodedString
于是换回标准的vim源码还是一样的问题,我擦嘞。上网搜一下说Python模式是UnicodeUCS2的支持,从源码里面直接grep一下这个函数发现是有的:
Include/unicodeobject.h:# define PyUnicode_AsEncodedString PyUnicodeUCS4_AsEncodedString
那只可能是没有开启编译选项了,./configure –help发现有如下一项:
–enable-uni...
libev源码分析
本文源码以libev4.20为准,其他版本大同小异。
libev是广泛使用的事件库,是一个功能强大的reactor,可以把Timer、IO、进程线程事件放在一个统一的框架下进行管理。如果有其他的事件触发需求也可以改libev源码把该事件加入libev的框架中(当前前提是得理解libev的设计)。有文章说libev性能比libevent好,没实验过,但是从源码角度看,libev要更简洁,当然更费解一点。作者为了追求代码的整洁和统一使用了大量的宏,造成了阅读的不便。这里我们从宏观分析一下libev的设计实现,然后穿插分析一些小的trick。旨在学习总结libev设计中优雅的地方。
基本概念
首先是一些主要的概念和数据结构。
libev通过定义watcher来关注一个事件,并且把事件...
ssh绑定其他端口
首先修改/ssh/sshd_config,把Port 22解注释,然后加一行Port xx。之后修改 /etc/sysconfig/iptables,加入该端口的Rules:
-A INPUT -m state --state NEW -m tcp -p tcp --dport xx -j ACCEPT
重启即可。
/etc/init.d/sshd restart
这么做的目的是如果出现问题,还有一个端口可以上去修改。登录的时候需要对应的指定一下端口:
ssh -p xx user@host
scp -P xx ... user@host
补充两个SSH技巧:
客户端配置中转,主要是通过跳板机登录:
Host xx
HostNam...
RBTools兼容的问题
某天ReviewBoard客户端突然用不了,使用 rbt post的时候报错:
from six.moves.urllib.parse import quote
ImportError: No module named urllib.parse
乍一看以为什么包被卸载了。于是pip install six –upgrade,无果。pip uninstall RBTools再重新安装RBTools,也无效。
查了一下six是python2、python3的兼容包,直接修改源码,不要兼容了,发现用到的地方好多,改不过来(ps,兼容python2、python3真不容啊)。
查看six的版本,发现跟本地一样的,本地没什么问题。说明不是six的问题。直接在命令行from six...
paxos的一些case分析
acceptor: a([epoc:4, value:n]) b[epoc:3,value:y] c[epoc:6,:value:y]
proposor: x5, x7, (x4, x3, x6)
prepare:x5[a, b], x7[b, c]
commit:x[4,n] y[6, y]
一共有5个proposer,
1)初始时 x4 (prepare)-> a, x3 (prepare)-> b,x6 (prepare)-> c,
2) x4, x3, x6 挂掉
3)x5(prepare)-> a, b
4)x5(commit[epoc:4, value:n])->a, b
5) x7(prepare) ->b, c
6...
484 post articles, 61 pages.