四、基於HTTPS協議的12306搶票軟體設計與實現--水平DNS併發查詢分享

chaofanwei發表於2014-12-16

一、基於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   查詢日誌介面

           其實這個介面算是新增加的吧,也就是在查詢車票執行前先執行個查詢日誌介面,我實驗了一下,發現不執行這個介面也行,不過查詢車票的介面就會變的慢一點,所以我最後還是加上了,很簡單,只用發下請求就行了。
                  介面:
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是全球都可以訪問的網站,需要提供高併發等功能,因此在各地都提供了多個伺服器,通過DNS解析,不同地區的使用者訪問距離本地最近的伺服器來進行解析,通過這樣12306來分解各地的高併發請求。但這樣的話就造成了另外一個問題,就是不同地區的使用者在同一搶票時間搶相同的火車票,但看到的頁面資料會有差別,有的可以看到剩餘車票,而有的看不到,這是因為他們訪問的不是同一個12306伺服器,不同的快取導致的。


    水平DNS查詢的功能簡單來說就是能列出12306各地伺服器相同車票的剩餘情況,看下圖便知。

    上圖顯示的就是全球各地12306伺服器同一時間相同車票的顯示情況(我這只是演示,要看到差別,可以在放票的那段時間,可以看到不同的伺服器會顯示不同的結果)。
   
    其實實現也非常簡單,首先通過DNS查詢工具,查詢出12306網站(kyfw.12306.cn)對應的各地的伺服器ip地址,然後每個地區都分別請求相同的車次,然後再table裡面列舉出來即可,簡單吧。


    這個功能是非常實用的,可以間接的反應出各地伺服器的反應快慢。最後假如某個地區的車次資訊顯示有票,那麼只需要把程式當前DNS修改一下,讓kyfw.12306.cn域名對應到那個IP地址即可,然後就可以訪問那個IP地址進行異地伺服器訂票。


    最後再說下,在我實驗水平DNS查詢的時候,發現如果選擇了異地伺服器進行訂票,會發現你需要在異地伺服器上重新登入下才可以訂票(可以說明12306在全國各地的應用伺服器並沒有共享session)。

 


 

 

相關文章