亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法和系統(tǒng)的制作方法

文檔序號(hào):7980599閱讀:306來(lái)源:國(guó)知局
一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開(kāi)一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法和系統(tǒng),所述方法包括:客戶端與共享點(diǎn)服務(wù)器建立連接后,共享點(diǎn)服務(wù)器記錄所述連接的相關(guān)信息,并在客戶端與應(yīng)用服務(wù)器間轉(zhuǎn)發(fā)消息,記錄的連接所用的資源在建立新連接時(shí)不被使用;當(dāng)共享點(diǎn)服務(wù)器與客戶端間連接中斷時(shí),共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源;當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接;中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端與共享點(diǎn)服務(wù)器間建立新連接。本發(fā)明能夠解決連接資源浪費(fèi),以及由于識(shí)別多個(gè)連接是否出自同一客戶端而造成的額外IO處理的問(wèn)題。
【專利說(shuō)明】一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,特別涉及一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法和系統(tǒng)。
【背景技術(shù)】
[0002]當(dāng)前客戶端與應(yīng)用服務(wù)器通信時(shí),可以依靠HTTP的通信方式。例如網(wǎng)頁(yè)版客戶端與應(yīng)用服務(wù)器通信間便可應(yīng)用HTTP進(jìn)行通信。當(dāng)客戶端需要不斷向應(yīng)用服務(wù)器請(qǐng)求數(shù)據(jù)時(shí),每次都要為HTTP的請(qǐng)求與應(yīng)答準(zhǔn)備大容量的數(shù)據(jù)包資源。打開(kāi)一次的HTTP通信通道只能使用一次不能復(fù)用。因此存在缺陷,利用HTTP通信網(wǎng)絡(luò)流量加大、負(fù)荷高、通信通道的資源利用率低。基于HTML5的WebSocket(網(wǎng)站端點(diǎn)),WebSocket為全雙工通信,該技術(shù)可以在客戶端與應(yīng)用服務(wù)器之間分別建立各自的Socket (端點(diǎn))互相連接。通過(guò)TCP/IP數(shù)據(jù)包傳輸數(shù)據(jù)?,F(xiàn)有技術(shù)中HTTP的單工通道通信與WebSocket雙通道通信比較如圖10所示。請(qǐng)求連接時(shí),HTTP每次通信都要新建立連接,僅傳輸一次數(shù)據(jù),即關(guān)閉連接IebSocket僅一次連接成功后建立通道,可多次傳輸數(shù)據(jù),不關(guān)閉連接。就通信通道而言,HTTP單向通信,只能瀏覽器請(qǐng)求,應(yīng)用服務(wù)器應(yīng)答IebSocket雙向通信,應(yīng)用服務(wù)器也可以主動(dòng)向客戶端發(fā)送數(shù)據(jù)。就廣播而言,HTTP不支持廣播,應(yīng)用服務(wù)器只能應(yīng)答一個(gè)瀏覽器請(qǐng)求;WebSocket可以廣播可以向所有已連接的客戶端發(fā)送數(shù)據(jù)。就數(shù)據(jù)包大小而言,WebSocket比HTTP數(shù)據(jù)包小。
[0003]一舉例中,HTTP數(shù)據(jù)包如下所示:
[0004]HTTP Request Headers
[0005]POST/webim/login.aspx HTTP/1.1
[0006]Host:webim.feixin.10086.cn
[0007]Connection: keep-alive
[0008]User-Agent: Mozi I la/5.0 (Windows; U; Windows NT6.0; en-US)
[0009]AppleWebKit/532.5(KHTML, like Gecko)Chrome/4.1.249.1064
[0010]Safari/532.5
[0011]Referer:
[0012]http://webim.feixin.10086.cn/webim/login.aspx?u=2038382&p=7F5E66657B938E2el
[0013]Content-Length: 134`
[0014]Origin:http: //webim.feixin.10086.cn
[0015]Content-Type: text/plain;charset=utf_8
[0016]Accept:*/*
[0017]Accept-Encoding:gzip, deflate, sdch
[0018]Accep t-Language: en-US, en; q=0.8
[0019]Accept-Charset:1S0-8859-1, utf-8; q=0.7,*; q=0.3[0020]Cookie:
[0021]—utmz=247824721.1273102477.1.1.utmcsr=(di rect) |utmccn=(di rect)|utmcmd
[0022]=(none);JSESS10NID=E7AAE0E60B01FB88D1E3799FAD5C62B3;
[0023]_utma=247824721.1247485893.1273102477.1273104838.127310768
[0024]=(none);JSESS10NID=E7AAE0E60B01FB88D1E3799FAD5C62B3;
[0025]_utma=247824721.1247485893.1273102477.1273104838.1273107686.3;
[0026]_utmc=247824721;_utmb=247824721.4.10.127
[0027]WebSocket數(shù)據(jù)包如下所示:
[0028]GET/ffebIM5?uaid=200665352p8912&s=b HTTP/1.1
[0029]Upgrade:WebSocket
[0030]Connection: Upgrade
[0031 ]Host: 192.168.110.165:5002
[0032]Origin:http://10.10.150.78
[0033]Sec-WebSocket-Keyl:3G`8}R7804\490(5
[0034]Sec-ffebSocket-Key2:<388<3379e017
[0035]"n:ds[4U
[0036]相比較,WebSocket比HTTP更加節(jié)省帶寬資源,性能更優(yōu)。但是,WebSocket中每次客戶端的網(wǎng)頁(yè)加載、被刷新、關(guān)閉網(wǎng)頁(yè),都會(huì)導(dǎo)致Socket的中斷,一但中斷下次就要重新連接。
[0037]因此存在缺陷:應(yīng)用服務(wù)器會(huì)不斷與客戶端之間產(chǎn)生新的連接通道。會(huì)造成大量連接資源的消耗。而且為識(shí)別多個(gè)連接是否是出自同一客戶端造成額外的10處理。

【發(fā)明內(nèi)容】

[0038]本發(fā)明提供的客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法和系統(tǒng),以解決連接資源浪費(fèi),以及由于識(shí)別多個(gè)連接是否出自同一客戶端而造成的額外10處理的問(wèn)題。
[0039]本發(fā)明首先提供一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法,所述方法包括:
[0040]客戶端與共享點(diǎn)服務(wù)器建立連接后,共享點(diǎn)服務(wù)器記錄所述連接的相關(guān)信息,并在客戶端與應(yīng)用服務(wù)器間轉(zhuǎn)發(fā)消息,記錄的連接所用的資源在建立新連接時(shí)不被使用;
[0041]當(dāng)共享點(diǎn)服務(wù)器與客戶端間連接中斷時(shí),共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源;
[0042]當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接;中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端與共享點(diǎn)服務(wù)器間建立新連接。
[0043]較佳的,所述共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄具體可以包括:
[0044]共享點(diǎn)服務(wù)器根據(jù)中斷的類型,在所述類型對(duì)應(yīng)的預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄。
`[0045]較佳的,所述當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接具體可以包括:
[0046]客戶端判斷中斷時(shí)長(zhǎng)沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,向共享點(diǎn)服務(wù)器發(fā)送連接的標(biāo)識(shí);共享點(diǎn)服務(wù)器根據(jù)連接標(biāo)識(shí)查找到所述連接的記錄,并按所述記錄重建連接。
[0047]較佳的,所述中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端與共享點(diǎn)服務(wù)器間建立新連接具體可以包括:
[0048]客戶端判斷中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端向共享點(diǎn)服務(wù)器發(fā)送建立新連接的請(qǐng)求;共享點(diǎn)服務(wù)器接收請(qǐng)求,建立新連接。
[0049]較佳的,所述共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄后還可以包括:
[0050]共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保持客戶端在應(yīng)用服務(wù)器上在線。
[0051]較佳的,所述方法還可以包括:
[0052]如果中斷持續(xù)時(shí)長(zhǎng)在客戶端等于預(yù)設(shè)時(shí)長(zhǎng),則客戶端詢問(wèn)共享點(diǎn)服務(wù)器客戶端是否在線,如果不在線,則共享點(diǎn)服務(wù)器模擬客戶端在應(yīng)用服務(wù)器上完成登錄。
[0053]較佳的,所述客戶端可以為網(wǎng)頁(yè)版應(yīng)用;客戶端與共享點(diǎn)服務(wù)器間連接通道所用協(xié)議為網(wǎng)站端點(diǎn)協(xié)議WebSocket。
[0054]其次,本發(fā)明還提供了一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的系統(tǒng),所述系統(tǒng)包括客戶端、共享點(diǎn)服務(wù)器和應(yīng)用服務(wù)器:
[0055]客戶端與共享點(diǎn)服務(wù)器連接,共享點(diǎn)服務(wù)器與應(yīng)用服務(wù)器連接;
[0056]客戶端,用于在連接的中斷沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)時(shí),重建連接,連接的中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,與共享點(diǎn)服務(wù)器建立新連接;
[0057]共享點(diǎn)服務(wù)器包括:
[0058]連接管理模塊,用于在客戶端與共享點(diǎn)服務(wù)器建立連接后,記錄所述連接的相關(guān)信息,記錄的連接所用的資源在建立新連接時(shí)不被使用,并在共享點(diǎn)服務(wù)器與客戶端間連接中斷時(shí),在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源;
[0059]轉(zhuǎn)發(fā)模塊,用于在客戶端與共享點(diǎn)服務(wù)器建立連接后,在客戶端與應(yīng)用服務(wù)器間轉(zhuǎn)發(fā)消息;
[0060]連接重建模塊,用于當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),按記錄的所述連接的相關(guān)信息重建所述連接。
[0061]較佳的,所述連接管理模塊具體可以用于:根據(jù)中斷的類型,在所述類型對(duì)應(yīng)的預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄。
[0062]較佳的,客戶端具體可以用于:判斷連接中斷的時(shí)長(zhǎng)沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,向共享點(diǎn)服務(wù)器發(fā)送連接的標(biāo)識(shí);所述連接重建模塊具體可以用于:根據(jù)連接標(biāo)識(shí)查找到所述連接的記錄,并按所述記錄重建連接。
[0063]本發(fā)明實(shí)施例的有益效果是:通過(guò)共享點(diǎn)服務(wù)器記錄所述連接的相關(guān)信息,當(dāng)共享點(diǎn)服務(wù)器與客戶端間連接中斷時(shí),共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源,當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接的方式使用共享點(diǎn)服務(wù)器對(duì)連接進(jìn)行管理,能夠避免連接資源浪費(fèi),以及避免由于識(shí)別多個(gè)連接是否出自同一客戶端而造成的額外IO處理。
【專利附圖】

【附圖說(shuō)明】[0064]圖1為本發(fā)明客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法流程圖。
[0065]圖2為本發(fā)明實(shí)施例的架構(gòu)圖。
[0066]圖3為本發(fā)明實(shí)施例中應(yīng)用的客戶端首次運(yùn)行的流程圖。
[0067]圖4為本發(fā)明實(shí)施例中應(yīng)用的客戶端切換到后臺(tái)運(yùn)行的流程圖。
[0068]圖5為本發(fā)明實(shí)施例中應(yīng)用的客戶端切換到前臺(tái)運(yùn)行的流程圖。
[0069]圖6為本發(fā)明實(shí)施例中實(shí)現(xiàn)連接的代碼的類圖。
[0070]圖7為本發(fā)明實(shí)施例中實(shí)現(xiàn)休眠隊(duì)列管理代碼的類圖。
[0071]圖8為本發(fā)明實(shí)施例中實(shí)現(xiàn)休眠時(shí)消息發(fā)送管理代碼的類圖。
[0072]圖9為本發(fā)明客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的系統(tǒng)的結(jié)構(gòu)圖。
[0073]圖10為現(xiàn)有技術(shù)HTTP的單工通道通信與WebSocket雙通道通信比較示意圖。
【具體實(shí)施方式】
[0074]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
[0075]參見(jiàn)圖1,為本發(fā)明提供的客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法流程圖。
[0076]所述方法包括如下步驟。
[0077]步驟S100,客戶端與共享點(diǎn)服務(wù)器建立連接后,共享點(diǎn)服務(wù)器記錄所述連接的相關(guān)信息,并在客戶端與應(yīng)用服務(wù)器間轉(zhuǎn)發(fā)消息,記錄的連接所用的資源在建立新連接時(shí)不被使用。
[0078]步驟S200,當(dāng)共享點(diǎn)服務(wù)器與客戶端間連接中斷時(shí),共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源。
[0079]步驟S300,當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接;中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端與共享點(diǎn)服務(wù)器間建立新連接。
[0080]本發(fā)明的方法能夠避免連接資源浪費(fèi),以及避免由于識(shí)別多個(gè)連接是否出自同一客戶端而造成的額外IO處理。
[0081]在一較佳的實(shí)施方式中,所述共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄具體包括:共享點(diǎn)服務(wù)器根據(jù)中斷的類型,在所述類型對(duì)應(yīng)的預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄。
[0082]例如,如果中斷的類型為網(wǎng)絡(luò)斷路,則預(yù)設(shè)時(shí)長(zhǎng)為5分鐘;如果中斷類型為切換到后臺(tái),則預(yù)設(shè)時(shí)長(zhǎng)為6小時(shí)。
[0083]由此,能夠根據(jù)中斷類型靈活配置類型對(duì)應(yīng)的預(yù)設(shè)時(shí)長(zhǎng),從而針對(duì)不同中斷類型的情況,為客戶端保留連接記錄。
[0084]在一較佳的實(shí)施方式中,所述當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接具體包括:客戶端判斷中斷時(shí)長(zhǎng)沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,向共享點(diǎn)服務(wù)器發(fā)送連接的標(biāo)識(shí);
[0085]共享點(diǎn)服務(wù)器根據(jù)連接標(biāo)識(shí)查找到所述連接的記錄,并按所述記錄重建連接。
[0086]其中,共享點(diǎn)服務(wù)器根據(jù)連接標(biāo)識(shí)進(jìn)行記錄查詢,舉例而言連接標(biāo)識(shí)可以為:會(huì)話標(biāo)識(shí)+終端標(biāo)識(shí)。[0087]在一較佳的實(shí)施方式中,所述中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端與共享點(diǎn)服務(wù)器間建立新連接具體包括:客戶端判斷中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端向共享點(diǎn)服務(wù)器發(fā)送建立新連接的請(qǐng)求;共享點(diǎn)服務(wù)器接收該請(qǐng)求建立新連接。
[0088]在一較佳的實(shí)施方式中,所述共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄后還包括:共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保持客戶端在應(yīng)用服務(wù)器上在線。
[0089]由此,保證客戶端恢復(fù)連接后,應(yīng)用交互的正常進(jìn)行。
[0090]在一較佳的實(shí)施方式中,所述方法還包括:
[0091]如果中斷持續(xù)時(shí)長(zhǎng)在客戶端等于預(yù)設(shè)時(shí)長(zhǎng),則客戶端詢問(wèn)共享點(diǎn)服務(wù)器客戶端是否在線,如果不在線,則共享點(diǎn)服務(wù)器模擬客戶端在應(yīng)用服務(wù)器上完成登錄。
[0092]在客戶端或應(yīng)用服務(wù)器的計(jì)時(shí)存在誤差時(shí),當(dāng)客戶端計(jì)時(shí)為中斷持續(xù)時(shí)長(zhǎng)等于預(yù)設(shè)時(shí)長(zhǎng),而應(yīng)用服務(wù)器中因?yàn)橹袛喑掷m(xù)時(shí)長(zhǎng)的計(jì)時(shí)大于預(yù)設(shè)時(shí)長(zhǎng),而將客戶端下線。通過(guò)上述方式,能夠既完成重新登錄又使得客戶端的用戶沒(méi)有感知到客戶端的連接中斷。
[0093]在一較佳的實(shí)施方式中,所述客戶端為網(wǎng)頁(yè)版應(yīng)用;
[0094]客戶端與共享點(diǎn)服務(wù)器間連接通道所用協(xié)議為網(wǎng)站端點(diǎn)協(xié)議websocket。
[0095]如前所述,websocket為性能更優(yōu)的通信技術(shù),本發(fā)明優(yōu)選該通信技術(shù)為連接通道所用協(xié)議。
[0096]實(shí)施例
[0097]本發(fā)明實(shí)施例的架構(gòu)如圖2所示。在實(shí)施例中,終端為蘋果終端,蘋果終端中包括推送應(yīng)用和客戶端。推送應(yīng)用為Apple App (蘋果應(yīng)用)模式,客戶端為網(wǎng)頁(yè)版即時(shí)通訊應(yīng)用的客戶端,Web App (網(wǎng)頁(yè)應(yīng)用)模式。共享點(diǎn)服務(wù)器為WSS (微軟共享點(diǎn)服務(wù)器),推送服務(wù)器為APNS (蘋果推送服務(wù)器)。
[0098]APNS向蘋果終端的推送應(yīng)用推送通知消息,推送應(yīng)用收到通知消息后,會(huì)發(fā)出聲音提示并彈出一個(gè)提示窗,告知使用者某應(yīng)用有最新消息通知,提示用戶將該應(yīng)用打開(kāi)查看。
[0099]雖然本發(fā)明為涉及客戶端與應(yīng)用服務(wù)器連接的方法,對(duì)客戶端在后臺(tái)的運(yùn)行處理沒(méi)有限制。但是作為一個(gè)完整的實(shí)施例,本實(shí)施例中給出客戶端在后臺(tái)時(shí)的推送處理。
[0100]本發(fā)明實(shí)施例中應(yīng)用的客戶端首次運(yùn)行的流程如圖3所示。
[0101]使用已注冊(cè)的蘋果開(kāi)發(fā)者的蘋果ID,創(chuàng)建一個(gè)蘋果軟件ID??梢詮奶O果網(wǎng)站的IOS開(kāi)發(fā)中心下載安全證書(shū)。依靠這個(gè)證書(shū)導(dǎo)出的.P12格式的文件,.pl2文件用于加密設(shè)備Token (標(biāo)識(shí))碼和要發(fā)送的通知消息內(nèi)容。
[0102]步驟S301,即時(shí)通訊網(wǎng)頁(yè)版客戶端在網(wǎng)頁(yè)中用javascript (腳本)注冊(cè)一個(gè)事件例如WebViewJavascriptBridgeReady。推送應(yīng)用調(diào)用此事件并傳入?yún)?shù)。
[0103]第一次打開(kāi)軟件后,WebViewJavascriptBridge被推送應(yīng)用觸發(fā),傳入的參數(shù)message(消息)值為:’ token’ +設(shè)備Token碼。推送應(yīng)用在此通過(guò)參數(shù)傳入獲知設(shè)備標(biāo)識(shí)。此處,推送應(yīng)用完成推送以外的獲知設(shè)備信息的功能。該推送應(yīng)用可以為客戶端自帶功能。本發(fā)明客戶端獲得設(shè)備標(biāo)識(shí)的方式不限于此。
[0104]即時(shí)通信應(yīng)用的用戶通過(guò)即時(shí)通信網(wǎng)頁(yè)版成功登錄即時(shí)通信客戶端。
[0105]本實(shí)施例可以通過(guò)如下代碼實(shí)現(xiàn)所述操作。
[0106]document.addEventLis tener(fWebViewJavascriptBridgeReady/, onBri
[0107]
dgeReady, false);
function onBridgeReady () {
WebViewJavascriptBridge.setMessageHandler (funct ion
(message) {

var firstmessage = message, substr(0, ”
switch (firstmessage) {
case 'fromb':
//從后臺(tái)喚醒時(shí)入前臺(tái)運(yùn)行
break;
case ' token':
//第一次進(jìn)入軟件
break;


}
});`
}`[0108]步驟S302,客戶端創(chuàng)建到WSS的WebSocket (網(wǎng)站端點(diǎn))連接,建立雙向通信通道,進(jìn)行登錄。
[0109]即時(shí)通訊應(yīng)用網(wǎng)頁(yè)版客戶端在網(wǎng)頁(yè)中使用javascript創(chuàng)建WebSocket,與WSS服
務(wù)建立雙向通信通道。實(shí)施例中通過(guò)如下代碼實(shí)現(xiàn)。
[0110]
var host = "ws: //localhost: 80/webimv5?u=20382983";
var socket = new WebSocket (host);
socket, onopen = function() {
message C Socket Status: ' +socket.readyState+/ 0pen/);
}
socket, onmessage = funct ion (msg) {
message {' Received: ' +msg.data);
}
socket, onclose = function() {
message (/ Socket Status: ' +socket.readyState+^ Close');
[0111]}
socket, onerror = function () {

message (/ Socket Error: ' +socket.readyState);
}
[0112]WSS 根據(jù)用戶的 SessionId (會(huì)話 ID) \UserAgentId (用戶代理 ID) \ 設(shè)備 Token碼(設(shè)備標(biāo)識(shí)碼),在內(nèi)存中建立一個(gè)SocketConnDic (當(dāng)前連接)集合,類型為:Dictionary<string, SocketConnection〉。集合中記錄建立的連接相關(guān)信息,以管理全部已連接的WebSocket客戶端信息。
[0113]記錄的連接的相關(guān)信息用SessionId進(jìn)行標(biāo)識(shí),記錄的連接對(duì)應(yīng)的信息包括:連接所用資源信息(即連接相關(guān)信息)和使用連接的客戶端用戶的信息。即SocketConnection中記錄了 WebSocket連接的信息和即時(shí)通信應(yīng)用的用戶信息。本發(fā)明實(shí)施例中實(shí)現(xiàn)連接的代碼的類圖如圖6所示。
[0114]步驟S303,WSS通知應(yīng)用服務(wù)器用戶登錄,開(kāi)始下發(fā)數(shù)據(jù)。
[0115]步驟S304,應(yīng)用服務(wù)器通知用戶登錄成功,并開(kāi)始下發(fā)數(shù)據(jù)。
[0116]步驟S305,WSS通知客戶端用戶登錄成功,發(fā)送數(shù)據(jù)。
[0117]步驟S306,客戶端通知推送應(yīng)用,登錄成功。
[0118]步驟S307,應(yīng)用服務(wù)器向WSS下發(fā)輪詢數(shù)據(jù)。
[0119]步驟S308,WSS向客戶端發(fā)送輪詢數(shù)據(jù)。
[0120]步驟S309,客戶端向WSS發(fā)送心跳Ke印Live。
[0121]KeepAlive:即時(shí)通信應(yīng)用客戶端維持在線的功能,即時(shí)通信網(wǎng)頁(yè)版客戶端會(huì)定時(shí)發(fā)送KeepAlive數(shù)據(jù)包到WSS。
[0122]步驟S310,WSS向應(yīng)用服務(wù)器發(fā)送Ke印Live。
[0123]步驟S311,應(yīng)用服務(wù)器向WSS發(fā)送確認(rèn)在線成功。
[0124]步驟S312,WSS向客戶端發(fā)送確認(rèn)在線成功。
[0125]客戶端依靠WebSocket連接向WSS服務(wù)獲取即時(shí)通信應(yīng)用的用戶的新輪詢數(shù)據(jù),輪詢數(shù)據(jù)包括新消息、好友添加消息、好友狀態(tài)變化、好友個(gè)人資料變化等。
[0126]本發(fā)明實(shí)施例中應(yīng)用的客戶端切換到后臺(tái)運(yùn)行的流程如圖4所示。
[0127]步驟S401,推送應(yīng)用通知WSS客戶端切入后臺(tái)。
[0128]當(dāng)蘋果終端使用者按下Home鍵或是切換到其它應(yīng)用程序。即時(shí)通信應(yīng)用網(wǎng)頁(yè)版客戶端會(huì)變?yōu)楹笈_(tái)運(yùn)行。
[0129]Home鍵是蘋果終端,例如iPad,屏幕上唯一的一個(gè)按鈕。Home鍵的功能很多,例如:退出應(yīng)用程序、導(dǎo)航到iPad2的第一頁(yè)及開(kāi)啟Dock (執(zhí)行中的工具欄)等等,Home鍵的使用頻率相當(dāng)多。
[0130]此時(shí)推送應(yīng)用會(huì)向WSS發(fā)送Post請(qǐng)求應(yīng)用服務(wù)器的WebIM/SetAPNSAddUser.aspx,并傳入?yún)?shù),參數(shù)message值為:’token’+即時(shí)通信應(yīng)用的用戶ID。
[0131]步驟S402,WSS收到切換到后臺(tái)通知后,通過(guò)應(yīng)用服務(wù)器客戶端為休眠狀態(tài)。
[0132]步驟S403,應(yīng)用服務(wù)器開(kāi)始為客戶端保存更新消息,并通知WSS休眠成功。
[0133]步驟S404,WSS將客戶端的WebSocket的連接從SocketConnDict集合中移到WSApnsUserDict集合(休眠集合)中。
[0134]WSApnsUserDict 集合類型為 Dictionary〈string, ApnsUserInfo〉。
[0135]步驟S405,WSS代替客戶端向應(yīng)用服務(wù)器發(fā)送輪詢。
[0136]步驟S406,應(yīng)用服務(wù)器向WSS發(fā)送更新消息。
[0137]步驟S407,在WSS中休眠的WebSocket連接,再收到即時(shí)通信應(yīng)用新消息,則判斷消息類型,如果是 PollResultDataType.MessagePushType,則通過(guò) MPAManager 發(fā)送到APNS。
[0138]步驟S408,APNS推送通知消息到蘋果終端的推送應(yīng)用。
[0139]步驟S409,推送應(yīng)用等待重新開(kāi)啟客戶端。
[0140]WSS還代替即時(shí)通信應(yīng)用客戶端向應(yīng)用服務(wù)器發(fā)送Ke印Al ive。
[0141]心跳時(shí)間維持六小時(shí),如果即時(shí)通信應(yīng)用客戶端未能喚醒程序,則使得應(yīng)用服務(wù)器執(zhí)行客戶端的用戶下線。
[0142]本發(fā)明實(shí)施例中應(yīng)用的客戶端切換到前臺(tái)運(yùn)行的流程如圖5所示。
[0143]步驟S501,推送應(yīng)用向客戶端發(fā)送消息。
[0144]當(dāng)切換即時(shí)通信應(yīng)用網(wǎng)頁(yè)版客戶端為前臺(tái)運(yùn)行時(shí),推送應(yīng)用會(huì)調(diào)用WebViewJavascriptBridge 事件并傳入?yún)?shù),參數(shù) message 值為:’ frombackground' + 即時(shí)通信應(yīng)用的用戶ID。
[0145]步驟S502,推送應(yīng)用清除APNS消息推送的計(jì)數(shù)為O。
[0146]步驟S503,客戶端與WSS重建連接,向WSS發(fā)送連接標(biāo)識(shí)和中斷類型。
[0147]本實(shí)施例中,連接標(biāo)識(shí)為SessionId+設(shè)備token。中斷類型為切換到后臺(tái)中斷。
[0148]即時(shí)通信應(yīng)用網(wǎng)頁(yè)版客戶端會(huì)判斷之前在后臺(tái)運(yùn)行的時(shí)間。
[0149]如果超過(guò)六小時(shí),貝U表示W(wǎng)SS已回收之前的WebSocket連接。只能新建一個(gè)新的WebSocket 連接;
[0150]如果未超過(guò)六小時(shí),則請(qǐng)求WSS執(zhí)行步驟S503和步驟S504,喚醒之前的WebSocket連接信息。
[0151]步驟S504,WSS將連接從休眠隊(duì)列中移入當(dāng)前連接集合。
[0152]將休眠的WebSocket 連接從 WSApnsUserDict 集合中移到 SocketConnDict 集合。
[0153]步驟S505,WSS通知應(yīng)用服務(wù)器休眠結(jié)束,客戶端已經(jīng)喚醒。
[0154]步驟S506,應(yīng)用服務(wù)器向WSS發(fā)送客戶端的更新消息。
[0155]更新消息包括客戶端在后臺(tái)期間的好友更新信息以及聊天信息。
[0156]步驟S507,WSS通過(guò)WebSocket連接轉(zhuǎn)發(fā)更新消息到即時(shí)通信應(yīng)用的客戶端。
[0157]步驟S508,客戶端發(fā)送輪詢和心跳。
[0158]恢復(fù)即時(shí)通信應(yīng)用網(wǎng)頁(yè)版客戶端發(fā)送輪詢及KeepAlive。
[0159]步驟S509,WSS向應(yīng)用服務(wù)器轉(zhuǎn)發(fā)輪詢及心跳。
[0160]步驟S510,應(yīng)用服務(wù)器下發(fā)更新消息。
[0161]步驟S511, WSS將更新消息通過(guò)WebSocket連接向客戶端轉(zhuǎn)發(fā)更新消息。
[0162]一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的系統(tǒng)如圖9所示。
[0163]所述系統(tǒng)包括:客戶端100、共享點(diǎn)服務(wù)器200、和應(yīng)用服務(wù)器300。
[0164]客戶端100與共享點(diǎn)服務(wù)器200連接,共享點(diǎn)服務(wù)器200與應(yīng)用服務(wù)器300連接。[0165]客戶端100,用于在連接的中斷沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)時(shí),重建連接,連接的中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,與共享點(diǎn)服務(wù)器200建立新連接。
[0166]共享點(diǎn)服務(wù)器200包括:
[0167]連接管理模塊210,用于在客戶端100與共享點(diǎn)服務(wù)器200建立連接后,記錄所述連接的相關(guān)信息,記錄的連接所用的資源在建立新連接時(shí)不被使用,并在共享點(diǎn)服務(wù)器200與客戶端100間連接中斷時(shí),在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源。
[0168]轉(zhuǎn)發(fā)模塊220,用于在客戶端100與共享點(diǎn)服務(wù)器200建立連接后,在客戶端100與應(yīng)用服務(wù)器300間轉(zhuǎn)發(fā)消息。
[0169]連接重建模塊230,用于當(dāng)客戶端100在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),按記錄的所述連接的相關(guān)信息重建所述連接。
[0170]在一較佳的實(shí)施方式中,所述連接管理模塊210具體用于:根據(jù)中斷的類型,在所述類型對(duì)應(yīng)的預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄。
[0171]在一較佳的實(shí)施方式中,客戶端100具體用于:判斷連接中斷的時(shí)長(zhǎng)沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,向共享點(diǎn)服務(wù)器200發(fā)送連接的標(biāo)識(shí);
[0172]所述連接重建模塊230具體用于:根據(jù)連接標(biāo)識(shí)查找到所述連接的記錄,并按所述記錄重建連接。
[0173]在一較佳的實(shí)施方式中,客戶端100用于:判斷中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,向共享點(diǎn)服務(wù)器200發(fā)送建立新連接的請(qǐng)求;
[0174]連接管理模塊210用于:接收請(qǐng)求,建立新連接。
[0175]在一較佳的實(shí)施方式中,所述連接管理模塊210還用于:在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保持客戶端100在應(yīng)用服務(wù)器300上在線。
[0176]在一較佳的實(shí)施方式中,客戶端100還用于:中斷持續(xù)時(shí)長(zhǎng)在客戶端100等于預(yù)設(shè)時(shí)長(zhǎng)時(shí),詢問(wèn)共享點(diǎn)服務(wù)器200客戶端100是否在線;
[0177]連接管理模塊210還用于:接收客戶端100的詢問(wèn),如果客戶端100不在線,則模擬客戶端100在應(yīng)用服務(wù)器300上完成登錄。
[0178]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的方法,其特征在于,所述方法包括: 客戶端與共享點(diǎn)服務(wù)器建立連接后,共享點(diǎn)服務(wù)器記錄所述連接的相關(guān)信息,并在客戶端與應(yīng)用服務(wù)器間轉(zhuǎn)發(fā)消息,記錄的連接所用的資源在建立新連接時(shí)不被使用; 當(dāng)共享點(diǎn)服務(wù)器與客戶端間連接中斷時(shí),共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源; 當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接;中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端與共享點(diǎn)服務(wù)器間建立新連接。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄具體包括: 共享點(diǎn)服務(wù)器根據(jù)中斷的類型,在所述類型對(duì)應(yīng)的預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),共享點(diǎn)服務(wù)器按記錄的所述連接的相關(guān)信息重建所述連接具體包括: 客戶端判斷中斷時(shí)長(zhǎng)沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,向共享點(diǎn)服務(wù)器發(fā)送連接的標(biāo)識(shí); 共享點(diǎn)服務(wù)器根據(jù)連接標(biāo)識(shí)查找到所述連接的記錄,并按所述記錄重建連接。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,` 所述中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端與共享點(diǎn)服務(wù)器間建立新連接具體包括: 客戶端判斷中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,客戶端向共享點(diǎn)服務(wù)器發(fā)送建立新連接的請(qǐng)求; 共享點(diǎn)服務(wù)器接收請(qǐng)求,建立新連接。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄后還包括: 共享點(diǎn)服務(wù)器在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保持客戶端在應(yīng)用服務(wù)器上在線。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于, 所述方法還包括: 如果中斷持續(xù)時(shí)長(zhǎng)在客戶端等于預(yù)設(shè)時(shí)長(zhǎng),則客戶端詢問(wèn)共享點(diǎn)服務(wù)器客戶端是否在線,如果不在線,則共享點(diǎn)服務(wù)器模擬客戶端在應(yīng)用服務(wù)器上完成登錄。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述客戶端為網(wǎng)頁(yè)版應(yīng)用; 客戶端與共享點(diǎn)服務(wù)器間連接通道所用協(xié)議為網(wǎng)站端點(diǎn)協(xié)議WebSocket。
8.一種客戶端與應(yīng)用服務(wù)器間進(jìn)行通信的系統(tǒng),其特征在于,所述系統(tǒng)包括客戶端、共享點(diǎn)服務(wù)器和應(yīng)用服務(wù)器: 客戶端與共享點(diǎn)服務(wù)器連接,共享點(diǎn)服務(wù)器與應(yīng)用服務(wù)器連接; 客戶端,用于在連接的中斷沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)時(shí),重建連接,連接的中斷超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,與共享點(diǎn)服務(wù)器建立新連接; 共享點(diǎn)服務(wù)器包括: 連接管理模塊,用于在客戶端與共享點(diǎn)服務(wù)器建立連接后,記錄所述連接的相關(guān)信息,記錄的連接所用的資源在建立新連接時(shí)不被使用,并在共享點(diǎn)服務(wù)器與客戶端間連接中斷時(shí),在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄,超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,刪除所述記錄,并釋放連接所用資源;轉(zhuǎn)發(fā)模塊,用于在客戶端與共享點(diǎn)服務(wù)器建立連接后,在客戶端與應(yīng)用服務(wù)器間轉(zhuǎn)發(fā)消息; 連接重建模塊,用于當(dāng)客戶端在預(yù)設(shè)時(shí)長(zhǎng)內(nèi)重建所述連接時(shí),按記錄的所述連接的相關(guān)信息重建所述連接。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于, 所述連接管理模塊具體用于:根據(jù)中斷的類型,在所述類型對(duì)應(yīng)的預(yù)設(shè)時(shí)長(zhǎng)內(nèi)保留所述連接的記錄。
10.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于, 客戶端具體用于:判斷連接中斷的時(shí)長(zhǎng)沒(méi)有超過(guò)預(yù)設(shè)時(shí)長(zhǎng)后,向共享點(diǎn)服務(wù)器發(fā)送連接的標(biāo)識(shí); 所述連接重建模塊具體用于:根據(jù)連接標(biāo)識(shí)查找到所述連接的記錄,并按所述記錄重建連接。`
【文檔編號(hào)】H04L29/08GK103516766SQ201210227199
【公開(kāi)日】2014年1月15日 申請(qǐng)日期:2012年6月30日 優(yōu)先權(quán)日:2012年6月30日
【發(fā)明者】張宗啟 申請(qǐng)人:北京神州泰岳軟件股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1