All Stories

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而不求甚解。

薰衣草小熊长虫

妹子生日的时候她表妹送了一个Bridestowe牌的薰衣草小熊给她。当时的多开心的,在电视上看到过某演艺圈的明星就是做这个生意的,在国内受到热捧。前段时间我在淘米的时候偶然发现这才买来没多久的袋装大米里居然有一两只米虫,虽然觉得这种品质的大米里会长米虫很奇怪,但因为小时候自家种自家碾自家吃的米里常常会有大量的米虫出现,多的时候甚至能听到“沙沙”的虫爬的声音,记得那时候爸爸还买来那种杀虫的药粉来撒在上面,所以我也没怎么当回事。前些天妹子突然发现放在床头的薰衣草小熊外面爬了好多米虫,幸亏外面套了个纱袋,才没让虫子大规模分布在整个屋里,但想来已经有一些能飞能爬的跑到外面去了。

新项目计划——密码管理

这两天看论坛,又想到两个对我来说比较有用的东西。其中一个是密码管理。