参考twisted的设计,做一些修改