zoukankan      html  css  js  c++  java
  • 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一、基于HTTPS协议的12306抢票软件设计与实现--实现效果 
    二、基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 

    三、基于HTTPS协议的12306抢票软件设计与实现--垂直查询效果分享

            哎,又过春节了,同志们又要抢票回家了,这票卖的可真快啊,瞬间的功夫就没有票了,一票难求啊!

     

            这两天闲着没事,刚好又要抢春节的票了。就把原来写的抢票软件给打开试了一下,发现居然不能查票了。于是就又改了一下。

    事实上是改了两下,一是:让原来的程序能够用起来(适应新接口),而是加上了水平DNS并发查询

    以下就依次说下吧。

     

    一、接口变更

                   事实上这次12306并没有大改。仅仅有一下几个接口改了。

    1.1   登陆验证码

                             这个仅仅是去了个action的后缀(.do)。不改也没有问题。但怕以后出问题。就改了一下。
                      接口:
    https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew
                      參数:和之前一样。

    1.2   查询车票

                      接口:https://kyfw.12306.cn/otn/leftTicket/queryT   (后面加了一个T)
                      參数未变。

    1.3   查询日志接口

               事实上这个接口算是新添加的吧,也就是在查询车票运行前先运行个查询日志接口,我实验了一下,发现不运行这个接口也行,只是查询车票的接口就会变的慢一点,所以我最后还是加上了,很easy。仅仅用发下请求就可以了。


                      接口:https://kyfw.12306.cn/otn/leftTicket/log
                      方法:GET
                      參数:和查询车票就可以參数一样。
                      返回值:不用管。

    1.4   获取联系人接口

                这个接口也没有大改,假设你的联系人少的话就不用管了。

    由于我的联系人有两页,但依照之前我提供的接口的话仅仅能获取第一页的联系人,导致第二页的联系人不能正常获取。因此改动为例如以下:
                      接口:https://kyfw.12306.cn/otn/passengers/query
                      方法:GET 或 POST
                      參数:pageIndex (第几页)
                      pageSize  (每页多少条记录)
                      返回值:json格式,略微解析下就能够了,字段名字没有变。

     

    二、水平DNS并发查询

               事实上这次改动最大的地方算是加了个水平DNS查询吧。由于12306是全球都能够訪问的站点,须要提供高并发等功能。因此在各地都提供了多个server,通过DNS解析,不同地区的用户訪问距离本地近期的server来进行解析,通过这样12306来分解各地的高并发请求。但这种话就造成了另外一个问题,就是不同地区的用户在同一抢票时间抢同样的火车票。但看到的页面数据会有区别。有的能够看到剩余车票。而有的看不到,这是由于他们訪问的不是同一个12306server。不同的缓存导致的。


        水平DNS查询的功能简单来说就是能列出12306各地server同样车票的剩余情况,看下图便知。

        上图显示的就是全球各地12306server同一时间同样车票的显示情况(我这仅仅是演示,要看到区别,能够在放票的那段时间。能够看到不同的server会显示不同的结果)。


       
        事实上实现也很easy。首先通过DNS查询工具,查询出12306站点(kyfw.12306.cn)相应的各地的serverip地址。然后每一个地区都分别请求同样的车次,然后再table里面列举出来就可以,简单吧。


        这个功能是很有用的,能够间接的反应出各地server的反应快慢。最后假如某个地区的车次信息显示有票,那么仅仅须要把程序当前DNS改动一下,让kyfw.12306.cn域名相应到那个IP地址就可以,然后就能够訪问那个IP地址进行异地server订票。


        最后再说下,在我实验水平DNS查询的时候,发现假设选择了异地server进行订票,会发现你须要在异地server上又一次登录下才干够订票(能够说明12306在全国各地的应用server并没有共享session)。


     

  • 相关阅读:
    HTML技巧: 语义化你的代码
    css sprite
    Redis主从复制原理
    idea修改快捷键
    Ubuntu14.20 安装docker,创建centos6.7容器,并访问centos容器
    [转]SQL 中 with as 的用法
    ftp与sftp及sftp和scp的区别
    Linux top 命令
    Linux free 命令
    ubuntu 源方式 安装jdk
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7092546.html
Copyright © 2011-2022 走看看