搜狗12306專(zhuān)版瀏覽器“定時(shí)搶票”功能技術(shù)解析
近日,春運(yùn)12306網(wǎng)站搶票軟件成為全民關(guān)注的焦點(diǎn),對(duì)于有傳聞稱(chēng)鐵道部找工信部要求各大瀏覽器廠商停止開(kāi)發(fā)12306刷票工具一事,搜狗瀏覽器官方表示,截止目前,搜狗公司從未接到來(lái)自任何有關(guān)部門(mén)的“叫停”通知,也未被“約談”,搜狗12306專(zhuān)版瀏覽器和搜狗瀏覽器12306搶票插件一直正常服務(wù),未受影響。請(qǐng)網(wǎng)友們放心下載使用。
搜狗12306專(zhuān)版瀏覽器具有獨(dú)創(chuàng)的“定時(shí)搶票”功能,能在放票的那一瞬間,也就是放票量最大的時(shí)候大幅提高用戶(hù)訂票的成功率,而且可以讓12306服務(wù)器“減負(fù)”,安全可靠。為啥這樣說(shuō),接下來(lái)請(qǐng)看詳盡的搜狗12306專(zhuān)版瀏覽器“定時(shí)搶票”功能技術(shù)解析報(bào)告。
搜狗12306專(zhuān)版瀏覽器“定時(shí)搶票”功能技術(shù)解析
在看一般人都看不懂的代碼分析之前,我們先來(lái)簡(jiǎn)單了解一下搜狗12306專(zhuān)版瀏覽器定時(shí)搶票功能的3大優(yōu)勢(shì)。了解有啥優(yōu)勢(shì),我們才知道代碼的意義。
- 對(duì)于用戶(hù)來(lái)說(shuō),“定時(shí)搶票”功能可以在放票的一瞬間開(kāi)始搶票,此時(shí)是票量最大的時(shí)候,相對(duì)于“自動(dòng)刷票”功能,可以大幅提升訂票的成功率;
- 對(duì)于12306網(wǎng)站,“定時(shí)搶票”功能可以減輕12306網(wǎng)站的負(fù)載,這是以禮相待之道。
- 對(duì)于其他搶票瀏覽器來(lái)說(shuō),“定時(shí)搶票”功能是目前他們并不具備的功能,搜狗是在充分考慮到“如何大幅提升用戶(hù)的訂票成功率”以及“減輕12306網(wǎng)站的負(fù)載”的情況下才推出這個(gè)功能。
代碼分析:
通過(guò)校準(zhǔn)時(shí)間、防踢出、放票瞬間搶票三個(gè)步驟幫助用戶(hù)在每次放票的瞬間訂票,相對(duì)于刷新余票退票來(lái)說(shuō),放票時(shí)的票量最大,因此用戶(hù)訂票成功的幾率也最大。
1.校準(zhǔn)時(shí)間:
用戶(hù)機(jī)器上的本地時(shí)間有可能不準(zhǔn)確,因此每當(dāng)用戶(hù)登錄進(jìn)來(lái)的時(shí)候,都會(huì)請(qǐng)求服務(wù)器時(shí)間,以服務(wù)器時(shí)間做為標(biāo)準(zhǔn)。
(邏輯:當(dāng)頁(yè)面載入的時(shí)候,向遠(yuǎn)程服務(wù)器發(fā)送獲取標(biāo)準(zhǔn)服務(wù)器時(shí)間的請(qǐng)求,請(qǐng)求地址為:http://www.sogou.com/websearch/features/standardtimeadjust.jsp?t=' + Date.now(),地址的最后加上時(shí)間戳來(lái)保證請(qǐng)求不會(huì)因?yàn)闉g覽器的緩存策略而受到影響,從而每一次請(qǐng)求都是一個(gè)全新的請(qǐng)求,能夠獲取到最新的標(biāo)準(zhǔn)時(shí)間,當(dāng)獲取到標(biāo)準(zhǔn)時(shí)間后就保存起來(lái)供后續(xù)校準(zhǔn)時(shí)間使用。)
搜狗12306專(zhuān)版瀏覽器在每一次定時(shí)搶票之前都會(huì)校準(zhǔn)時(shí)間
代碼:
- (function(w, d){
- var getRemoteTime = function(){ //獲取標(biāo)準(zhǔn)時(shí)間(通過(guò)jsonp的方式獲取)
- var script = d.createElement('script');
- script.src = 'http://www.sogou.com/websearch/features/standardtimeadjust.jsp?t=' + Date.now();
- d.body.appenDChild(script);
- };
- var standardtime = function(timestamp){ //當(dāng)標(biāo)準(zhǔn)時(shí)間獲取到時(shí),通知頁(yè)面,保存標(biāo)準(zhǔn)時(shí)間
- matchPort.postMessage({command: 'ready', remoteTime: timestamp});
- };
- w.standardtime = standardtime;
- var matchPort;
- sogouExplorer.extension.onConnect.addListener(function(port){ //當(dāng)12306登錄頁(yè)面或者查詢(xún)頁(yè)面載入時(shí),發(fā)起查詢(xún)標(biāo)準(zhǔn)時(shí)間的請(qǐng)求
- if(port.name === 'remoteTime'){
- matchPort = port;
- port.onMessage.addListener(function(msg){
- if(msg.command === 'get'){
- getRemoteTime();
- }
- });
- }
- });
- }(window, document));
- ……
- var now = new Date(Date.now() - utility.diffTime), //根據(jù)當(dāng)前本地時(shí)間和時(shí)間差計(jì)算出來(lái)的當(dāng)前服務(wù)器時(shí)間
- hour = now.getHours(),
- min = now.getMinutes(),
- sec = now.getSeconds();
- padding_time = diff(countdown_time, { //計(jì)算當(dāng)前服務(wù)器時(shí)間和最終時(shí)間的差距,格式為*小時(shí)*分*秒
- hour: hour,
- min: min,
- sec: sec
- });
- };
2.防踢出
當(dāng)用戶(hù)端瀏覽器因長(zhǎng)時(shí)間未操作時(shí),有可能被12306網(wǎng)站認(rèn)為對(duì)話(huà)已結(jié)束,從而會(huì)將用戶(hù)踢出。這將嚴(yán)重耽誤用戶(hù)購(gòu)票的時(shí)間,為了防止這種情況的發(fā)生,同時(shí)減輕12306網(wǎng)站的負(fù)擔(dān),搜狗“12306專(zhuān)版瀏覽器”會(huì)定時(shí)對(duì)12306網(wǎng)站說(shuō):“Hi,我還在線(xiàn),請(qǐng)不要將我踢出。”
(邏輯:定時(shí)發(fā)送空請(qǐng)求,請(qǐng)求地址為https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=init&t=' + Date.now(),同樣加上了時(shí)間戳防止因?yàn)g覽器緩存策略而不能將請(qǐng)求真正發(fā)送給12306服務(wù)器。)
代碼(位于12306-webkit.js中):
- var intervalRequest = function(){
- var requestUrl = 'https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=init&t=' + Date.now();
- var img = new Image;
- img.src = requestUrl; //發(fā)起一個(gè)空請(qǐng)求
- setTimeout(intervalRequest, interval);
- };
- intervalRequest();
3.放票瞬間搶票
當(dāng)放票的一瞬間,開(kāi)始搶票,因?yàn)榕c服務(wù)器時(shí)間已同步,因此搜狗會(huì)在第一時(shí)間發(fā)送請(qǐng)求,對(duì)于以秒計(jì)算的搶票過(guò)程來(lái)說(shuō),無(wú)疑擁有更高的幾率訂票成功。
“定時(shí)搶票”功能與其他瀏覽器的“自動(dòng)刷票”功能相比,示例如下:
13:00:00秒開(kāi)始放票,其他搶票瀏覽器如果已經(jīng)在12:59:59秒刷新過(guò)頁(yè)面,那他們的下次刷新時(shí)間為13:00:05(遵守12306網(wǎng)站6秒/次的刷新頻率) ,但搜狗“定時(shí)搶票”功能卻可以在13:00:00準(zhǔn)時(shí)開(kāi)始搶票,寶貴的5秒鐘,可以顯著提升用戶(hù)訂票的成功率。
(邏輯:當(dāng)?shù)褂?jì)時(shí)終了的時(shí)候就會(huì)將之前保存起來(lái)的出發(fā)地、目的地的信息回填到輸入框中,隨后觸發(fā)左側(cè)“開(kāi)始刷票”按鈕的功能,不斷嘗試,直至刷到有票為止。)
代碼:
- .addEndHandler(function(){ //倒計(jì)時(shí)時(shí)間達(dá)到,開(kāi)始刷票
- first_ticket_btn_status = 'stopped';
- first_ticket_pingback = true;
- $('#first-ticket-btn').removeClass('running').adDClass('stopped');
- countdown = null;
- hideFirstTicketInfo();
- $tickettime_options.attr('disabled', false);
- $tickettime_options.val('').change();
- $toolbar_startdate.attr('disabled', false);
- //將之前保存的相關(guān)信息以程序的方式填入進(jìn)去,準(zhǔn)備刷票
- $('#fromStationText').val(fromStationText4FirstTicket);
- $('#fromStation').val(fromStation4FirstTicket);
- $('#toStationText').val(toStationText4FirstTicket);
- $('#toStation').val(toStation4FirstTicket);
- $('#startdatepicker').val(startdate4FirstTicket);
- if(auto_refresh_btn_status === 'stopped'){
- $('#auto-refresh-btn').click(); //觸發(fā)刷票功能
- }
- })
- .start();
總結(jié)
對(duì)于這個(gè)全球瞬間點(diǎn)擊量第一,而卻沒(méi)有淘寶樣強(qiáng)大承載能力的12306網(wǎng)站,單純靠原始的人工刷票方法,就算給你一天時(shí)間也不一定刷出票來(lái)。
搜狗對(duì)搶票技術(shù)做了大量?jī)?yōu)化,獨(dú)家推出“定時(shí)搶票”功能,保證用戶(hù)在放票的第一時(shí)間開(kāi)始搶票,與一般搶票插件的“自動(dòng)刷票”功能相比,其優(yōu)勢(shì)是搶票成功率大大提升,并且對(duì)12306服務(wù)器的負(fù)載大大降低,做到了兩全其美。搜狗將持續(xù)做好12306專(zhuān)版瀏覽器的技術(shù)維護(hù),為更多歸心似箭的網(wǎng)友帶來(lái)福音。