All Stories

升级istkani

昨天打算提交一个istkani的新版本到app store,其实没什么更新的内容,前段时间在UI上微微调整了一下,其他原本想加的功能一直由于拖延症而没动手。只是因为iOS8发布了,Xcode也升级到了6.0.1而想试一下。结果遇到了不少问题。

istkani在App Store于八月份成功卖出两份

昨天收到Apple AppStore的邮件,是八月份的Financial report,原来八月份居然卖出了两份istkani,真是太让我意外了。本来自五月份上架以来,除了兑换码送出几十份以外,我就没怎么指望能把它卖出去的,虽然也有过一些升级的计划,增加新特性以及提升UI设计等等,不过后来还是一直拖延着。

Go语言Unmarshal GBK编码的XML

昨天在写微信公众号文章的爬虫,中间需要解析一段GBK编码的XML,结果发现Go语言自带的encoding/xml包默认是不支持除UTF-8以外其他编码的。在网上随便搜了搜,能看到代码的方法不是过时的就是不能work的,最后还是看到比较官方的一个包可以解决这个问题,代码如下:

重构IPC协议

到今天为止,IPC协议的重构也进行了一部分,效果不错。原本每秒一次的查询是否有新命令,现在使用阻塞式的查询,有新命令会立即到达,可以立即执行,原本一条新增instance的命令要大概3秒才能得到回应执行完毕,现在基本上下发命令就立即能得到回应了。同时删除instance命令也由原来的平均0.5秒耗时变成立即完成。

支持https

昨天找SSL代购买了个支持泛域名的SSL证书,现在Yiili就支持https了,我在nginx上加了个重定向,把所有http的请求都指向https了。

更少的线程

之前说过,Relay项目要重构,第一件事就是要把每个程序的线程数减少,甚至改成单线程的。最近这一周全都在做这件,略有成果。

netlink需要root权限

这周一直在按计划重构Relay,今天就做到改用netlink监控进程退出事件。发现如果是普通用户的话在bind socket时就会返回权限不够的错误码,尝试用sudo来运行就可以正常bind了,这让我不由郁闷了好一阵子,因为我一直想的是Relay可以用普通用户就可以正常运行的。后来再想想,把Relay当成像nginx之类的服务来设计的话,要求用户以root权限来启动似乎也不是太过分哈。照计划中,估计也只有Linux上用netlink是要用root吧,Windows和BSD系的方法我猜是不需要特别的权限吧。

重构Relay项目

前面提到过,因为了读了一点《Linux多线程服务端编程》,觉得自己对网络编程有了更多的了解,可以对公司里负责开发维护的那个小项目动手重构了。这个小项目从功能上简单说来,就是个流量转发器,也可说成是个中断器,所以项目名称就叫Relay了。几乎每个刚听到这句话的人,都会第一时间发出疑问:这种功能网上开源代码或现成工具应该有很多,比如nginx就有类似的功能,为什么要自己做一个?答案可以从两个方面来回复,一种霸道无理点的说法是,这是公司策略,这个理由足以堵住所有质疑者的嘴巴。另一种理性点的说法是,自己做可控性好,可扩展性也好,比如我们要有实时的流量统计,我们要自定义高效的传输协议,像nginx的http传输性能不能完全满足我们的需求等等。

Reactor和Proactor模式

其实我大概10年前就知道ACE了,并且把国内翻译引入的3本以ACE为蓝本的讲C++网络编程的书都收齐了,之所以说是收齐,是因为自己买了两本《C++网络编程》,而由译者马维达送了一本ACE开发指南。但是三本书入手后并没有认真读过,后来工作上也跟C++网络开发基本不相关,于是一直了解不多。直到现在这份工作,虽说终于转向网络开发了,但实际上要么因为老代码已经把底层封装好了,要么就直接用了Boost.Asio而不求甚解。