SnooQQ发布V0.2版

[| 2010/11/16 17:51]
今天发布了SnooQQ的0.2版,相比0.1版增加了号码重登陆和号码下线功能。并升级了配套的php页面,修复myqq中下线的一个recv导致线程饿死的问题。

目前SnooQQ的功能:qq上线、验证码输入、重登陆、下线、发消息、收消息。

SnooQQ是一个多线程挂Q服务程序,使用EPOLL模型,可以同时处理多用户业务请求,其他程序可以使用指定的数据格式与之通信,向其发送qq登陆、下线、发消息、收消息等指令。与qq服务器的通信使用myqq封装的协议库。

总结一下开发的心得:

1,曾经在收消息时总是多出一块,调试一下午毫无收获,后来发现myqq在从gbk到utf8转换的时候用同一个buffer存放输入和输出的字符串,而同一条消息用gbk编码时长度要小于用utf8时,导致buffer中存在垃圾数据。

2,刚刚发布到VPS上的时候发现在开发机上只占很小内存的程序在VPS上要占数十M内存。纠结不知为何,后来发现原来使用OPENVZ技术虚拟出的VPS在计算内存用量的时候是按占用虚拟地址的大小来计量的。比如malloc一块10m的内存,但是不使用,在普通机器上占内存数几乎为0,在OPENVZ的VPS上要占用10M的内存配额。SnooQQ由于是多线程程序,每个线程默认分配8M的栈,导致每增加一个线程就要消耗8M多的虚拟地址空间。实际上使用的栈空间很小,估计了程序大概使用的栈大小后,用ulimit -s 256设置栈大小为256k,内存用量降低到了可接收的程度,程序运行不收影响。

3,之前在调试myqq的时候发现退出号码的时候总是有一个线程卡住无法退出,代码中也提到会阻塞。但是经过观察发现很多时候会卡死不退出。详细查了下代码,发现阻塞的线程在号码退出是阻塞在recv上,而另一个线程调用close去关闭socket时不会唤醒此进程。所以该线程长时间阻塞在recv上。假如服务器长时间没有消息发往该套接口,那么线程就卡住无法返回。(理论上服务器是周期性发送数据的,但我测试的时候经常会在recv上阻塞数分钟之久,具体原因待详细考察),我修改了一下,退出时对recv的线程调用pthread_cancel函数将其退出。不过略显粗暴,后期会进行优化。
最近要重写博客,于是在测试机上搭建环境,重写到文章显示那里,结果发现评论显示没有问题,文章显示乱码,搞了一晚上不知为何。晚上躺在床上突然想起来上次迁移也遇到了这个问题,记得是由于数据库导入的时候导入乱码导致。乱码那次用的是MYSQL Administrator导出,然后导入的。我尝试用服务器每天自动备份的(使用mysqldump)数据库文件,依旧用MYSQL Administrator导入,发现问题解决。

虽然问题解决,但是原理仍未明白,因为为何乱码时只有文章乱而评论不乱?两者字符集设置、字段类型都相同。时间原因,暂未细究。先行记下。
由于想保持博客主题和app的独立性,所以在编写supermail的时候使用了另一套ci框架,有心给app开一个二级域名,但是想了一下为了不由于公用ip导致降低博客在搜索引擎中的权重,决定先监听在一个别的端口,日后再迁移到博客/smapp/**下。

今天下午图书馆不开,加之买的书还没到,决定完成迁移工作。

首先需要优化程序,在所有的url链接处都用echo base_url()来组成完整url,这样迁移的时候通过修改config里面的base_url可以保证不会因使用绝对路径导致的问题。

其次是需要修改nginx。有如下三个方案:
1,对于location /smapp/,设置不同的root,这个方法是效率最高的,也最容易配置,不过我感觉这么设置总是别扭,不大想用。
2,使用curl,在博客的controller中建立一个smapp.php,对不同的url分别用curl抓取内容,然后返回。相当于做了个网页代理。但是搞了一会后发现实现困难,并且效率低,兼容性差。
3,反向代理,之前supermail监听的端口不变,不过由监听0.0.0.0改为监听127.0.0.1,这样此端口在外界看起来是封闭了。然后在nginx中对location /smapp/做反向代理。

从nginx文档上看到的是说,在对url做proxy_pass(反向代理)之前不能rewrite,于是我一开始先是把location /smapp/放在了rewrite规则的前面,结果发现还是被rewrite了,说明nginx在处理的时候是先把rewrite规则都匹配完毕后才处理location。不以位置改变这两者的顺序。于是只能加了一条rewrite规则,对/smapp/段的直接break。

然后配置反向代理,设置:
location /smapp/ {
proxy_pass http://127.0.0.1:****/;
break;
}
注意,proxy_pass后面的url的末尾是否带'/'是有区别的,假如不带,那么反向代理的uri中带有/smapp/这一段,假如带,uri中直接以/smapp/后面的部分开始。我刚开始加'/'的时候总是报错,也许是由于前面rewrite没有break掉的缘故。后来加上后成功了。

现在已经完成了迁移,不过美中不足之处是rewrite规则多了一步,稍稍有些影响效率,不过可以通过配置反响代理缓存来弥补这一性能缺失。
昨天一天chkdsk后终于恢复了分区数据一致性,可以进入系统了,但是扫描出了一些坏道。进入系统后用victoria扫描了一下,发现c盘状态不佳。27G600M处是重灾区,很多坏块和慢块。其他地方倒还可以。不过鉴于硬盘状态已经不再稳定,为了数据安全考虑,决定更换硬盘。

很早就想买7200转的硬盘了,这次正好换硬盘,又看了下。7200转硬盘在性能上优势还是非常大的,我现在的笔记本硬盘用hdtune测试,读取速度最高才56m,而最新一代的7200转硬盘读取最高速度都能达到100m/s以上,对性能的提升还是非常大的。

上网看了一下西数,希捷,日立的数据评测。西数黑盘推出时间最晚,性能最高,但是价格也非常高,要600左右。希捷推出最早,性能也最弱,zol报价380,日立的推出时间和性能都是居中的,zol报价460,京东也是460。但淘宝电器城里的价格才380多。并且查了查,发现500g,7200转硬盘淘宝出货量最多的就是日立。希捷和西数的都很少。不知道为何。

最后选了一家看起来比较正规的店,入手一个日立盘。又买了个飚王黑鹰的盒子给老硬盘用。本来想买刀锋2500的,但是想到老硬盘也没有必要用那么好的盒子,并且两个刀锋盒子的话容易吧两个移动硬盘搞混。飚王的盒子也是不错的,看起来也好看,于是买了个飚王的。


备注:关于硬盘坏道。之前很长时间都以为硬盘的坏道就是完全不能读的块。好块读起来都一样。不过一个疑惑就是为什么有的软件能把数据从坏道上备份到好道上。这两天研究了下,发现硬盘状态不是二值化的,而是以读取时间为标准渐变的。正常的硬盘区块几十ms就可以读取,但是对于有些问题的区块,就要几百ms,甚至超时。往往把读取时间过长,或者超时的区块叫做坏道。有时候我们发现系统突然卡住,硬盘灯狂转,而这时并没有什么大的硬盘操作。这就有可能是硬盘在读慢块。慢块并不导致数据的丢失,但会导致系统反应缓慢,经常卡住。并且由于慢块读取速度慢,需要反复去读,很容易进一步损伤造成坏道。

平时生活中往往我们很少注意坏道的问题,认为当出现蓝屏等极端情况时才需要检测硬盘健康状态。其实不然,硬盘状态下降的初期并不会出现坏块,而是出现很多慢块,这个时候系统就会变得不稳定。应该在这个时期就早做预防,避免硬盘罢工才想到更换。

这次的硬盘事件也解决了一个困扰我比较长时间的问题,就是电脑异常缓慢和经常卡住。之前经常出现硬盘狂转,系统缓慢的情况,而cpu和内存都是比较空闲的,一直以为是操作系统或者是软件问题,现在才知道原来是硬盘在作祟。

360比较bt

[| 2010/10/11 10:40]
发现就我的电脑而言,每次我修改下360的什么,它就给我闹毛病。以前每次360一升级就不能正常关机,必须按电源。昨天由于嫌360杀毒升级导致电脑太卡,所以把360杀毒关闭,并关闭了其开机自启动。晚上10点的时候电脑硬盘狂转,卡了,按电源关闭后重启,蓝屏进不去,安全模式也不行。用安装盘修复,也没法修复,郁闷。windows系统上用了比较长时间,有很多东西,不想重装。算了,暂时用linux。

到学校了

[| 2010/10/08 11:42]
到学校了。收拾

收拾东西,准备撤了

[| 2010/10/02 21:29]
明天一点半的飞机,要提前几个小时坐车过去。今天事先踩了下点。想退深圳通结果人家国庆不营业。于是回来的时候买了些东西把深圳通里的钱花的差不多了,只留了六块明天坐车。

晚上收拾东西,意外的发现700现金。。估计是带过来以后忘了。爽,感觉赚了700的样子。

和房东算清了水电什么的。准备电脑装包了。东西比较多,估计一背包一提的小包装不下。特意买了个小编织袋。

待了3个月,有点不舍。深圳的很多特色还是挺让人怀念的。
ipod这个东西我感觉定位就是给赶潮流的电脑小白设计的。貌似时间什么的都是iTunes自动设置,不能自己手动改。但是iTunes官方商店现在在国内还无法连接,原因说是在大陆还没上市。估计小白们要傻眼了,这可咋办捏,还好,我表示鸭梨不大。连接到官方商店一看,我kao,都是美元为价格单位的。穷人买不起,还是等破解吧

香港一日游

[| 2010/10/02 02:19]
马上就要回去了,办的港澳通行证还没有用过,趁十一假期赶紧用一下。

昨天打电话给李bo,约好了联系方式。今天早晨八点多一点起来。买了两瓶水。就去坐地铁了。

很快到了罗湖,根据出站指示,很快的到了海关。两次排队。时间都不是太长。然后就到了香港的境内了。买了张八达通,买了个手机卡,前者150,后者60。

装上卡给李bo打电话,刚开始以为去掉85即可。结果老是打错,一直上了火车,问了问,原来要去掉852,汗。

到了旺角东,见到李波,开始逛。香港的街道很窄,旺角东这一块两边的房子也比较破,但是公共设施很完善。红绿灯会发出或紧或慢的响声,向盲人提示当前的状态,很人性化。

这次来香港两个目标,一个是买个5230,一个是买itouch4,在旺角东来回转了几圈,价格都差不多,又去女人街走了走,买乱七八糟的小东西的,没啥兴趣。然后先吃饭,吃了个丸子面,忘了学名叫什么了。丸子很不错。弹性甚好,38。在香港这个价格算一般了。

出来开始出手,先买了5230,1430,带4g卡,第二块电池等等。又买itouch,结果大多无货。有一个商店有一台,但是搭配一个充电器和一套贴膜+保护套。多加300块。那个充电器和保护套明显不值300,不过别的地方都没货。来香港一次不易,咬咬牙买了。2088。

然后出来转转,不知道买点什么,后来想想买点吃的什么的吧。进了个药店一转,什么也不懂,销售员各种给推荐补品什么的。后来转了个角落,发现有酸梅汤和凉茶,买了一罐酸梅粉,两个凉茶,100出头。

香港基本全是粤语了,店员虽然会普通话,但是讲的不怎么样。都是李bo负责用粤语和店员交流。在这表示感谢。

该买的东西都买了,开始乱转,跟着李bo,从旺角东一直走,走了很多地方,有的记不太清楚了。走过一个九龙警局的地方貌似,附近有个公园,里面很多菲律宾人,李bo说香港这边菲佣周末都要出来转。一般会在公园等地方扎堆坐着。我们休息了一下。继续走。忘了走了多长时间转了几圈,后来到了维多利亚港,(还去了个大的商场,忘了顺序了)很繁华,景色不错。转了几圈,坐船到香港岛上。转了一会,去吃饭。吃饭前转了转酒吧那一块,外国人居多。晚饭吃了个鸡肉饭,50。也还不错。吃晚饭出来坐小巴。上山,转悠了半天,到了。这个时候天已经黑了。山上人也很多,由于晚上深圳这边的地铁停运早,所以我们开始下山。下来的时候封路了,小巴换了个地方停,我们走了一段路才看到烟花,刚好开始。开始看,持续23分钟,看了看也没什么新意。

看完烟花坐地铁。在地铁上我担心手机和itouch过海关被查到,还装到兜里,后来证明海关基本不管。出关后赶紧去地铁站,刚好11点。恰好有一辆停在那里,我上去后3分钟就开了。正在庆幸赶上了最后一班车,后来问了问旁边的人,说国庆延长时间。。。亏了,白紧张那么长时间。11点40到了深大站,这时站内广播最后一班车要发车了,果然延长了40分钟。。

回来整理了下东西,试了试手机。玩了下itouch。现在itouch不能越狱,蛋疼。买来尝鲜还不能玩。不过确实用起来很爽。

整理了下剩余的港币,除了500和1000的,正好有一套。10元的还有塑料版的和纸版的。有意思。1元硬币还有个78年女王头像的。真古老。先写到这里,很晚了。

SuperMail更新-V0.8

[| 2010/09/28 00:51]
1,修正:在弹出修改/添加配置的框后,假如未提交任何数据就关闭框,不再刷新页面。
2,修正:初步解决邮件转发环路。
3,新:用户设置目标邮箱后发送通知邮件。
4,添加新域名,采取直接vps接收方式,避免一些邮件被qq企业邮箱当成垃圾邮件过滤掉。避免用qq邮箱向supermail地址发送邮件时被提示地址不存在。
分页: 8/23 第一页 上页 3 4 5 6 7 8 9 10 11 12 下页 最后页 [ 显示模式: 摘要 | 列表 ]