快春节了,火车票一票难求。虽然黄牛市场冷淡了,但是互联网“娱乐界”却越来越闹腾了。先是猎豹等浏览器推出抢票专版(插件),然后是铁道部约谈金山,之后流传工信部叫停抢票插件,之后再是工信部出面否认,最后金山某某人在视频上鄙视了一下铁道部:称愿意提供技术支持……(转载请指明出于breaksoftware的csdn博客)
我也是抢票大军中的一员。记得上个周六,我早早的爬了起来抢票,结果看着票一张张减少,而自己始终没有抢到一张票!!有点愤怒!能怎么办?只能不停的刷呗!我是从上午10点一直刷到下午3点,才刷到一张7号下午的票。这迫使我7号下午得请半天假。晚上和老爸汇报了下抢票战果,老爸问我:你自己怎么不写个抢票软件呢?是的,从那天上午10点起,我就开始了这个想法——定制一款抢票软件。可以说,经过一个星期的编写,大致可以使用了,而且我实现了猎豹等浏览器没有的功能——自动识别验证码。虽然准确度无法达到100%,但是准确度在50%以上是没问题的(我验证了十几个验证码的自动识别,不对的大概就3个左右)。我是准备在订购返程票之前将这个工具写好,并提供给朋友使用。但是我昨天发现,12306将验证码改了!以前的特征也基本不在了,这使得我这个软件中最大的亮点——验证码自动识别失效!这个对我打击挺大的。我也就只能在CSDN上分享下我在编写12306抢票浏览器时的思考和问题。
构架
一提到构架,我就觉得心虚。其实我这个压根没什么构架。来点实际的,设想一下抢票这个场景:
人物:一个人、一台开着12306网页的电脑。
事件:一个人通过键盘和鼠标在12306页面上进行输入和点击。
我们可以将这个场景简化:
这个人就是一个“进程”,他不吃饭不用陪女朋友更不用上厕所,它要做的就是操作12306这个页面。
打开12306网页的浏览器也是个进程,这个进程中执行一系列复杂的网络传输和渲染操作。相对来说“人”这个进程做的事就很简单了,因为它很单纯,目标唯一,我们甚至可以把它看成一个单线程进程。但是进程间通信可能又是个麻烦点,虽然这个技术不麻烦,但是从实用角度说,能不那么复杂就别那么复杂。那如何弄呢?我们可以把“人”这个进程和12306浏览器合并为一个进程,“人”只是这个浏览器进程中的一个线程。我们可以将“人”这个线程想成是个非常独立于浏览器的线程,它们之间似乎是割裂的,但是又在流程上存在着一定的关系。这个就是我说的“构架"。