分类目录归档:IT领域

#暨大离线# windows平台下面的静态文件web服务器选型

今天下午和晚上在做暨大离线的一些准备,主要测试了一些东西

离线下载,顾名思义你离线,服务器帮你下载,那么服务器下完之后还得给你传,这里采用什么传输方式呢?

一开始我有考虑使用ftp,但是发现相比起http下载,ftp还有很多人不会用,如果这个局域网过程仍然采用http下载,对于用户来说会不会比较无痛呢?

于是我开始测试服务器用的web服务器软件,服务器这边目前是win2k3环境(至于为什么,后面文章再有详细介绍)。

这个服务器承担让用户取回要下载的文件的这么一个角色,只需要对静态文件提供http下载即可,不需要脚本支持。

Nginx在windows——杯具!

一开始我测试了windows版本的nginx,nginx在linux上面是个很不错的服务器软件,有低资源占用,抗并发能力好等特点。但是到了windows平台上就坑爹啊~~这一点你还不能怪nginx的开发者,实际上C语言可以为Windows平台编写软件,linux也没有例外。程序本身的逻辑应该是跨平台的,而在具体与系统打交道(调用系统api)的时候才有差异,这个差异有很多方面,包括内存管理、进程管理、文件系统、网络控制等方面。而一个优秀的开源服务器软件,nginx,在windows下,是在这次测试中表现最渣的一个。对于同一个普通二进制静态文件,局域网内客户端开5线程下载平均速度在1mb/s左右,峰值可以达到1.5mb/s,速度很不稳定。

Apache在windows——仍旧杯具!

第二我测试了Apache,Apache作为市场占有率第一的服务器软件,在windows平台上也有比较完善的版本。我是从官方网站下载的2.2stable版安装的,还是跟上面一样的那个文件,一样的客户端一样的5线程,下载平均速度1.3mb/s,峰值能到1.5mb/s。速度比较稳定,不过Apache的个东西,性能不会是最好的,apache和nginx最大的不同是,apache使用了每个请求一个线程的阻塞I/O模型,nginx使用了单线程的非阻塞I/O模型,关于apache和nginx之间的讨论还有很多,我比较偏向于把apache和nginx组合来使用(明显是说在linux平台上),这样他们两个可以互相取长补短。

IIS不用说肯定是在windows——居然能跑这么快!坑爹啊

最后我尝试了IIS,IIS的配置过程看起来非常轻松方便。测试同一个文件,额,什么情况!这win2k3上面的iis6,居然让客户端的下载速度平均值达到了2mb/s,峰值能到2.3mb/s。搜了一下网上很多人都有说这个问题,在微软的windows上面就他自家的iis跑得最快了,别的都是渣渣。

就这样这个web服务器软件就暂时选定了IIS吧,是那个我之前相当鄙视的IIS,总的来说其实是自己对于IIS没有很多的认知。IIS怎么说市场份额也是排在第二的(Apache比它大几倍的稳居榜首),另外有一点,国内很多入门级虚拟主机都是windows+IIS+ISAPI来支持PHP的,他们也不会在windows上面弄apache,这一点也能说明一些问题。当然了,这是一片神奇的土地,国外又完全不是这么回事了,国外一般人不会用Windows做服务器的操作系统(是服务器不是pc),包括费用等方面的考虑(我觉得更大的原因是——用不着)。

 

天天动听安卓版皮肤解包工具云端版

这次发布的是天天动听安卓版皮肤解包工具的云端版,部署于新浪云计算。

继续开源,代码丑陋还望指正。传送门index.php

上传皮肤文件,云端完成解包和zip重打包,弹出下载。

这次的coding让我学习了两个很好用的php函数,pack和unpack,用于操作二进制字符串到变量之间的互转。

同时做这个东西也让我见识到一个PclZip的类库,在php没有zip支持下直接实现zip包操作(代码很长,5k行)。

=======================题外==========================

之前发过这个东西 天天动听安卓版皮肤打包工具分析+自制解包工具放出,当时这个工具是用易语言写的,易语言做的程序误杀报毒的问题,不是一天两天了。易语言作为国人开发的一款中文编程语言,我是挺支持的,挺喜欢的,也算是用了几年,写写小工具之类的小开发效率很高。

由于报毒和其他各种原因,易语言杯具的说,一直告诉自己不能依赖工具,特别是易语言。一开始我发现天天皮肤打包工具(官方放出的)很小(6KB),是C#弄的吧。于是我也想用C#反过来写一个解包工具,不过……我还没学过C#,上学期末选课的时候C#和Java二选一,我毫不犹豫选了Java。而C#的代码,我只是能看懂一些,会查手册,就这水平。(ps:有一天建阳篮球场旧书义卖三折,我逛了计算机类的,发现厚的就只有一本C#3.0自学宝典,原价68,有光盘还很新,我就花了20块买下来了,不过一直没翻过,我现在和可预见的将来我都觉得没必要翻)

vs2010早早装在了我的电脑,很大很大,安装的光盘镜像就2.5G,一直没用它来做过什么项目,倒是用它来看过很多别人的小项目。后来习惯了notepad++之后,这种文本类的代码文件我一般都用notepad++打开和编辑(有时也会淡定的直接用记事本)。那天在易语言实现了解包函数过后,想尝试用C#来做,一开始感觉还很不错的,自动完成和代码提示感觉很好。自动完成就连句中的空格字符都帮你调好了,而代码提示直接很方便的看到一个对象支持哪些操作。我那天就经常是在对象名之后按下.然后慢慢翻看代码提示的列表,找出适合用的函数。不过可能是因为不熟悉吧,后来我放弃了,疼痛点是类型转换问题,甚是纠结。

今天在用php写这个代码的时候,感觉php弱类型爽多了,而且php里面二进制资源可以很安全的放在一个字符串里面进行操作,这点是我之前不知道的(php嘛,我也没怎么学过,看过一点书,维护过一些代码)。很灵活很灵活,配合pack和unpack两个函数可以从二进制字符串中获取和转换内容,也可以生成二进制资源进行进一步处理(如联系文件、其他持久化存储)

 

阿黎说USB移动存储

今天阿黎来说一下USB移动存储方面的知识和阿黎的经验。USB移动存储设备我们很多人都有用到,USB大容量和快速等优点直接就秒杀了软盘这个东西,很多年前我们已经不在电脑上面装软盘驱动器了。

其实光驱貌似也快要淘汰了,对比起U盘,普通Cd-Rom 650Mb显得很不够用,我们使用光盘的机会也越来越少了。以前除了操作系统,很多普通软件都得拿光盘装,现在基本都可以上网下载了。光驱还有一个弱点就是寿命比较短,就算你不常用,台式机的光驱很多都只能用几年就读不了盘了,常用的话挂得更快。

我们常用的USB存储设备有U盘和移动硬盘,包括各种手机、Mp3、Mp4之类的也可以算在U盘里面。下面阿黎来说说纯U盘和移动硬盘这两大块的一些问题。

①关于扩容U盘:U盘有很多个品牌得很多种不同的产品,有很多设计造型很独特的U盘,也有很多设计中规中矩的U盘。阿黎认为,目前我们使用U盘最主要还是用于一些文件的中转,例如我要从我教室的电脑上面拷贝一份老师的ppt回宿舍看,我就要用到U盘。那么其实我们主要只是需要U盘有存储功能就够了。

其实现在市场上有很多假U盘,第一种就是仿冒的,这一种尤其多见于各种奇形怪状的设计的U盘那里,特别是国外的好的设计,可能很快就会被C2C(Copy to China,山寨?)。然而,这些U盘的质量很难有保证。第二种是最恶劣的,垃圾扩容盘,我所知道的在我身边遇到这种U盘的至少有两个同学了。所谓的垃圾扩容盘是指什么呢?现在U盘的容量越来越大,有32G的,有64G的,8G跟16G的都比较普遍了,价格也不算很贵了。很多童鞋买U盘都尽量选一个大一点的,问题就在这里。

有一些黑心的商家会利用特别的软件工具把一些旧的、坏的、回收回来的U盘存储芯片翻新,然后做成新U盘出售。他们会用特别的工具把U盘存储芯片上坏的部分隐藏起来,同时他们还可以将U盘的标称容量改大,例如,有一个本来是128M容量的U盘,然后用工具把标称容量改成8G,重新装一个外壳打包装然后用8G 容量U盘的价格出售。这不是开玩笑哦,这是可以做到的而且市场上的确有很多这样的U盘,说不定你在用的就是。很多人把U盘插在电脑上,右键属性一看,容量差不多就以为可以了,其实不然。

这样的U盘明显会出问题,首先,虚标容量可以骗过系统,但是骗不了自己。如果芯片本身就是128M容量的,你能把它标成8G,但是你可以放8G东西进去吗?这明显是不可以的啊,如果确实这样做会造成存储数据的损坏,例如有一些扩容U盘在写到物理极限的时候(例如上面说的例子,128M),可能复制文件的过程就中断了,可能有提示错误,也可能没有提示。你高高兴兴的以为复制完的数据,其实不完整。有的扩容盘做得很好,没有任何错误提示,但是数据会读不出来,读出来不完整等等,反正问题多多。

那么怎么检测扩容盘呢?我们可以使用一个叫做MyDiskTest的工具检测,这个工具的主程序好像停止更新很久了,在win7系统里面无法完成对扩容盘的修复。我们可以用这个工具帮我们尝试写入容量标示的数据,看看U盘是否能够正常存储,如果你看到类似于下图那样的提示,那么你中招了……

如果你的U盘是垃圾扩容盘,那么很难保证在使用过程中不会出什么问题。这个工具可以帮你把U盘恢复原貌,回到其确切的容量。这样就不会出现这个问题,当你想放进去超过实际容量的东西的时候系统还傻乎乎的以为真能放进去。还有一点需要提一下,如果你看到所谓的足量U盘,那么它很可能是假的。标准单位是按照2^10=1024为单位换算的,即1GB=1024MB=1024*1024KB=1024*1024*1024B;而现在的现在存储设备厂商是按照1000为单位换算的,1GB只相当于实际的0.931GB,所以4G=4*0.931=3.724G左右,8G=7.448G左右,都不会出现刚刚好在电脑上显示几乎跟标示容量一样的情况,如果你遇上了别以为它质量特别好,特可能只是扩容过而已。

有一个阿黎遇到的实例就是放在U盘里头的东西读不出来了。这可以是一个很严重的问题,阿黎认为,数据是无价的,我们更需要一个质量过硬的读写稳定的U盘。如果你的U盘检测到是扩容的,那么阿黎十分不建议你继续用这个盘,至少你不能存重要的东西、没有备份的东西在里面,他随时可能挂掉。

在哪里买U盘好?阿黎个人认为,在电脑城等地方其实也不确保(很可能是非常不确保)能买到正规的质量好的U盘,有一些摆地摊的、价格远低于实际的就更加可疑了。阿黎比较推荐网购,不过网购也有很多假货的,购买数码电子类产品阿黎推荐在卓越、京东等比较有质量保证的的网上商城购买,切记便宜莫贪。

②买U盘还是移动硬盘?其实如果想要购买移动硬盘的话性质就不一样了,如果说U盘是少量文件转移用,那么移动硬盘就是一个偏向于大文件转移、文档存档存放等的用途。一般移动硬盘的容量比U盘大很多,当然价格也会贵几百块。但是算起来其实移动硬盘比较值,用移动硬盘的钱去买U盘,凑起来容量肯定还不会够移动硬盘大。不过比起U盘,移动硬盘的便携性差很多,一般来说移动硬盘体积要比U盘大很多,而且一般都需要一根数据线来跟电脑连接,而U盘一般是直插的,也比较小巧。

除了上面所说的,可能很多没有用过移动硬盘的人会忽略一点,就是移动硬盘会比U盘快很多。阿黎早些年也以为,同样是Usb接口的存储设备,速度应该都差不多,其实不然。一般移动硬盘能达到20-40mb每秒的写入速度,30-40mb的读出速度;而U盘的写入速度一般不会超过10Mb每秒,读取速度也不会高过20mb每秒。这一点差别在拷贝大文件例如电影等的时候有很明显的体现。阿黎也有发现吧系统镜像放在移动硬盘上面去给别人装机会比用光盘块,具体没有详细测试过。所以阿黎上面有说淘汰光驱。

移动硬盘会有假的吗?好吧,在中国其实……移动硬盘一样会有假货,市场上有很多移动硬盘是用回收的笔记本硬盘加上一块简单的电路板改造而成的。尤其是容量在30G到40G附近的移动硬盘,早期的笔记本电脑很多硬盘是这个容量的。阿黎也有一个,用着还可以其实,掉链子的情况不多。移动硬盘比U盘更贵所以买的时候应该更加谨慎,如果买到下图这一种……

③Usb 3.0?随着科技的进步在Usb接口的标准上面又发展出新的Usb3.0标准,Usb3.0标准极大的提高了传输的带宽。简单地说,USB2.0的最高传输速率为480Mbps,即60MB/s,而Usb 3.0则是达到5Gbps的最高传输速率。早阵子有同学要买移动硬盘提到了Usb3.0这个问题,其实是这样的,有一个东西我们要明确,Usb3.0的接口跟我们现在普遍的Usb2.0接口是不一样的,但是他们可以兼容。兼容表示这两个标准的插头和插座可以一起用不会出现插不进的问题,而且数据上也是可以正常传输的。不过Usb3.0加了5根线,具体就是在原来的Usb2.0的4个金属触点前面并排加了5个触点,下面的图可以看一下。

可以对比发现我们现有的一般的Usb2.0接口,这5个触点是在原来usb2.0接口的空白没有用到的地方开辟的,所以他物理上可以跟2.0的接口兼容。而多加了线这一点也明显地告诉我们,如果我们把一个Usb3.0接口的移动硬盘接在usb2.0接口的电脑上面,是没有办法利用到usb3.0的,因为只有接头跟接口两边都是Usb3.0接口才能让这新增加的5根线连接上。一般在台式机上面用于转换Usb3.0接口的Pci板卡已经有了,也有很多笔记本配备了Usb3.0的接口,但是更多的是像阿黎这样没有配备Usb3.0的笔记本和台式机,这些机器就暂时不能利用这些新技术了。

话说其实移动硬盘的速度瓶颈还有一个,就是硬盘的本身,硬盘是电脑里面为数不多的有机械运动的主要部件。机械运动这个属性注定它会有速度瓶颈。貌似我们一般的硬盘读写速度最多也只有60mb左右,想要一个速度很快的硬盘?搜索SSD固态硬盘吧,很贵……

=============题外话分割线=============

上次有朋友反映博客文章太长这个问题,阿黎也有深深的考虑过,有些东西的确不能三言两语讲明白,阿黎本人也比较多废话,所以文章就长篇大论了。阿黎有试着写简短一点但是这篇又不短了……阿黎有努力尽量写得有趣一点能够吸引读者去读这长长的文章,阿黎以后尽量给文章配点图图,大家有任何的意见和建议欢迎留言或者发邮件给阿黎提出。额,话说一周没有更新博客了,最近忙得要死,无论是人还是机器都是满负荷运转,阿黎在冲刺假期最后的几天,加油!