一種向客戶端推送內(nèi)容的方法及推送服務(wù)器的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種向客戶端推送內(nèi)容的方法及推送服務(wù)器。
【背景技術(shù)】
[0002]客戶端和服務(wù)器的通信方式通常有socket (套接字)方式通信數(shù)據(jù);或http (超文本傳輸協(xié)議)方式拉取數(shù)據(jù)。
[0003]服務(wù)器和客戶端通過socket通信數(shù)據(jù),其優(yōu)點(diǎn)有實(shí)時性高,可做廣播和可實(shí)現(xiàn)邏輯比較復(fù)雜的業(yè)務(wù);其缺點(diǎn)在于穩(wěn)定性和安全性都依賴于服務(wù)器的代碼質(zhì)量。當(dāng)服務(wù)端的入口地址更改或者業(yè)務(wù)服務(wù)器出現(xiàn)問題就會導(dǎo)致業(yè)務(wù)功能不能正常使用,還需要做網(wǎng)關(guān)服務(wù)器等一系列服務(wù)器來確保穩(wěn)定性,且服務(wù)端直接與客戶端相連接,增加了安全隱患。服務(wù)器與客戶端通過http方式通信的優(yōu)點(diǎn)是穩(wěn)定性和安全性有web服務(wù)器來做保證,缺點(diǎn)在于不能實(shí)現(xiàn)廣播、邏輯性比較復(fù)雜和實(shí)時性較高的業(yè)務(wù)。
[0004]目前,亟需一種客戶端與服務(wù)器之間的通信方法,在安全、穩(wěn)定的情況下,保證廣播、邏輯復(fù)雜業(yè)務(wù)及實(shí)時性較高的業(yè)務(wù)的實(shí)現(xiàn)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明要解決的技術(shù)問題是提供一種向客戶端推送內(nèi)容的方法及推送服務(wù)器,能夠在保證安全、穩(wěn)定的情況下,實(shí)現(xiàn)廣播、邏輯復(fù)雜及實(shí)時性較高的業(yè)務(wù)。
[0006]為解決上述技術(shù)問題,本申請的一種向客戶端推送內(nèi)容的方法,包括:
[0007]推送服務(wù)器建立客戶端與業(yè)務(wù)服務(wù)器的連接并為客戶端分配推送通道;
[0008]所述推送服務(wù)器接收所述客戶端在連接到所述推送通道后發(fā)送的業(yè)務(wù)請求,將所述業(yè)務(wù)請求發(fā)送給所述業(yè)務(wù)服務(wù)器;
[0009]所述推送服務(wù)器將所述業(yè)務(wù)服務(wù)器根據(jù)業(yè)務(wù)請求進(jìn)行相應(yīng)處理時返回的信息通過為客戶端分配的推送通道推送給所述客戶端。
[0010]進(jìn)一步地,所述方法還包括:
[0011]所述推送服務(wù)器在為客戶端分配推送通道后,還為推送通道生成通道標(biāo)識,并將通道標(biāo)識返回給客戶端,以使客戶端根據(jù)通道標(biāo)識連接到推送通道,所述通道標(biāo)識包括用戶標(biāo)識、用戶密碼和擾碼。
[0012]進(jìn)一步地,所述推送服務(wù)器在為推送通道生成通道標(biāo)識后,還以所述用戶標(biāo)識為索引將所述用戶密碼和擾碼保存到密碼隊列中;
[0013]所述推送服務(wù)器將所述業(yè)務(wù)服務(wù)器根據(jù)業(yè)務(wù)請求進(jìn)行相應(yīng)處理后返回的信息通過為客戶端分配的推送通道推送給所述客戶端,包括:接收業(yè)務(wù)服務(wù)器返回的信息,根據(jù)攜帶的用戶標(biāo)識從密碼隊列中讀取出用戶標(biāo)識對應(yīng)的用戶密碼和擾碼,生成客戶端對應(yīng)的推送通道的通道標(biāo)識;根據(jù)通道標(biāo)識將信息推送到相應(yīng)通道,使連接到所述推送通道的客戶端接收到信息。
[0014]進(jìn)一步地,所述推送服務(wù)器為超文本傳輸協(xié)議http服務(wù)器,所述業(yè)務(wù)服務(wù)器為套接字socket服務(wù)器;所述推送服務(wù)器在向所述業(yè)務(wù)服務(wù)器發(fā)送消息時,將消息轉(zhuǎn)換為socket格式;所述業(yè)務(wù)服務(wù)器在向所述推送服務(wù)器發(fā)送消息時,通過轉(zhuǎn)發(fā)服務(wù)器將消息轉(zhuǎn)換為http格式并轉(zhuǎn)發(fā)給所述推送服務(wù)器。
[0015]進(jìn)一步地,所述推送服務(wù)器建立客戶端與業(yè)務(wù)服務(wù)器的連接,包括:
[0016]所述推送服務(wù)器接收客戶端發(fā)送的連接請求,從所述連接請求中提取出用戶密碼,并將所述連接請求發(fā)送給所述業(yè)務(wù)服務(wù)器;
[0017]所述推送服務(wù)器接收業(yè)務(wù)服務(wù)器根據(jù)連接請求為客戶端分配的用戶標(biāo)識,向客戶端返回連接確認(rèn)。
[0018]進(jìn)一步地,一種推送服務(wù)器,包括:拓展腳本模塊和推送模塊,其中:
[0019]所述拓展腳本模塊,用于建立客戶端與業(yè)務(wù)服務(wù)器的連接并為客戶端分配推送通道;接收所述客戶端在連接到所述推送通道后發(fā)送的業(yè)務(wù)請求,將所述業(yè)務(wù)請求發(fā)送給所述業(yè)務(wù)服務(wù)器;
[0020]所述推送模塊,用于將所述業(yè)務(wù)服務(wù)器根據(jù)業(yè)務(wù)請求進(jìn)行相應(yīng)處理時返回的信息通過為客戶端分配的推送通道推送給所述客戶端。
[0021]進(jìn)一步地,所述拓展腳本模塊,還用于在為客戶端分配推送通道后,為推送通道生成通道標(biāo)識,并將通道標(biāo)識返回給客戶端,以使客戶端根據(jù)通道標(biāo)識連接到推送通道,所述通道標(biāo)識包括用戶標(biāo)識、用戶密碼和擾碼。
[0022]進(jìn)一步地,所述拓展腳本模塊,還用于在為推送通道生成通道標(biāo)識后,以所述用戶標(biāo)識為索引將所述用戶密碼和擾碼保存到密碼隊列中;
[0023]所述推送模塊將所述業(yè)務(wù)服務(wù)器根據(jù)業(yè)務(wù)請求進(jìn)行相應(yīng)處理后返回的信息通過為客戶端分配的推送通道推送給所述客戶端,包括:接收業(yè)務(wù)服務(wù)器返回的信息,根據(jù)攜帶的用戶標(biāo)識從密碼隊列中讀取出用戶標(biāo)識對應(yīng)的用戶密碼和擾碼,生成客戶端對應(yīng)的推送通道的通道標(biāo)識;根據(jù)通道標(biāo)識將信息推送到相應(yīng)通道,使連接到所述推送通道的客戶端接收到信息。
[0024]進(jìn)一步地,所述拓展腳本模塊,還用于在向所述業(yè)務(wù)服務(wù)器發(fā)送消息時,將消息轉(zhuǎn)換為套接字socket格式;從所述業(yè)務(wù)服務(wù)器接收業(yè)務(wù)服務(wù)器通過轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)換為超文本傳輸協(xié)議http格式并轉(zhuǎn)發(fā)的消息。
[0025]進(jìn)一步地,所述拓展腳本模塊建立客戶端與業(yè)務(wù)服務(wù)器的連接,包括:
[0026]接收客戶端發(fā)送的連接請求,從所述連接請求中提取出用戶密碼,并將所述連接請求發(fā)送給所述業(yè)務(wù)服務(wù)器;
[0027]接收業(yè)務(wù)服務(wù)器根據(jù)連接請求為客戶端分配的用戶標(biāo)識,向客戶端返回連接確認(rèn)。
[0028]綜上所述,本申請中的推送服務(wù)器作為客戶端與業(yè)務(wù)服務(wù)器的中間層,可起到網(wǎng)關(guān)服務(wù)器的作用,當(dāng)業(yè)務(wù)服務(wù)器出現(xiàn)問題時,也可以隨時進(jìn)行調(diào)整,業(yè)務(wù)服務(wù)器不與客戶端直接連接減少安全隱患,且具體穩(wěn)定和高并發(fā)的特點(diǎn),可擴(kuò)展性更強(qiáng)。
【附圖說明】
[0029]圖1為本申請的向客戶端推送內(nèi)容的方法的流程圖;
[0030]圖2為本申請的向客戶端推送內(nèi)容的方法的交互圖;
[0031]圖3為本申請的推送服務(wù)器的架構(gòu)圖。
【具體實(shí)施方式】
[0032]下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0033]實(shí)施例1:
[0034]如圖1所示,本申請的向客戶端推送內(nèi)容的方法,包括:
[0035]步驟101:推送服務(wù)器建立客戶端與業(yè)務(wù)服務(wù)器的連接并為客戶端分配推送通道;
[0036]客戶端向推送服務(wù)器發(fā)送連接請求,推送服務(wù)器從連接請求中提取出用戶密碼,并將連接請求轉(zhuǎn)換成socket格式,通過UDP方式發(fā)給業(yè)務(wù)服務(wù)器。業(yè)務(wù)服務(wù)器為用戶(客戶端)分配一個用戶標(biāo)識(UID),通過turnServer (轉(zhuǎn)發(fā)服務(wù)器)將攜帶UID的消息轉(zhuǎn)換成http格式發(fā)給推送服務(wù)器。
[0037]推送服務(wù)器接收到業(yè)務(wù)服務(wù)器發(fā)送的為客戶端分配的用戶標(biāo)識后,判斷客戶端是否擁有推送通道,如果沒有,則為客戶端分配推送通道,并為推送通道生成通道標(biāo)識。推送服務(wù)器向客戶端返回連接確認(rèn),通過連接確認(rèn)將通道標(biāo)識返回給客戶端,以使客戶端能夠根據(jù)通道標(biāo)識連接到推送通道。
[0038]通道標(biāo)識包括用戶標(biāo)識、用戶密碼和擾碼。用戶標(biāo)識為業(yè)務(wù)服務(wù)器為客戶端所分配;用戶密碼為客戶端在連接請求中所攜帶;擾碼為推送服務(wù)器隨機(jī)生成,一次登錄中擾碼保持不變。推送服務(wù)器在為推送通道生成通道標(biāo)識后,以用戶標(biāo)識為索引將用戶密碼和擾碼保存到密碼隊列中。
[0039]本申請中,推送服務(wù)器為http服務(wù)器,如可采用web服務(wù)器中的nginx服務(wù)器。推送服務(wù)器在向業(yè)務(wù)服務(wù)器發(fā)送連接請求以及其他消息時,將消息轉(zhuǎn)換為socket格式。例如,推送服務(wù)器采用nginx服務(wù)器時,通過nginx服務(wù)器中的ngx_lua(拓展腳本)模塊上運(yùn)行的自定義Iua腳本將消息轉(zhuǎn)成socket格式。
[0040]業(yè)務(wù)服務(wù)器為socket服務(wù)器。業(yè)務(wù)服務(wù)器在向推送服務(wù)器發(fā)送為客戶端分配的用戶標(biāo)識以及其他消息時,通過轉(zhuǎn)發(fā)服務(wù)器將消息轉(zhuǎn)換為http格式并轉(zhuǎn)發(fā)給推送服務(wù)器。
[0041]步驟102:推送服務(wù)器接收客戶端在連接推送通道后發(fā)送的業(yè)務(wù)請求,將業(yè)務(wù)請求發(fā)送給業(yè)務(wù)服務(wù)器;
[0042]客戶端在接收到推送服務(wù)器返回的通道標(biāo)識后,根據(jù)通道標(biāo)識連接到推送通道。例如,通道標(biāo)識中的用戶密碼以joinAuthKey表示,用戶標(biāo)識以uid表示,擾碼以channel表示,則客戶端在接收到通道標(biāo)識后,可以通過訪問地址http://服務(wù)端地址/sub/$ {joinAuthKey}_channel_$ {uid}連接到推送通道??蛻舳嗽谶B接到推送通道后,在有業(yè)務(wù)需求時,向推送服務(wù)器發(fā)送業(yè)務(wù)請求。
[0043]推送服務(wù)器在接收到客戶端發(fā)送的業(yè)務(wù)請求后,將業(yè)務(wù)請求轉(zhuǎn)換為socket格式,將socket格式的業(yè)務(wù)請求發(fā)送給業(yè)務(wù)服務(wù)器。
[0044]步驟103:推送服務(wù)器將業(yè)務(wù)服務(wù)器根據(jù)業(yè)務(wù)請求進(jìn)行相應(yīng)處理時返回的信息通過為客戶端分配的推送通道推送給客戶端。
[0045]推送服務(wù)器在將業(yè)務(wù)請求發(fā)送給業(yè)務(wù)服務(wù)器后,業(yè)務(wù)服務(wù)器根據(jù)業(yè)務(wù)請求進(jìn)行相應(yīng)處理,并向推送服務(wù)器返回信息。在返回的信息中攜帶為客戶端分配的用戶標(biāo)識。攜帶業(yè)務(wù)服務(wù)器返回的信息的消息經(jīng)轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)換為http格式后轉(zhuǎn)發(fā)給推送服務(wù)器。
[0046]例如,針對聊天業(yè)務(wù),客戶端A在需要向客戶端B發(fā)送消息時,向推送服務(wù)器發(fā)送業(yè)務(wù)請求。推送服務(wù)器將業(yè)務(wù)請求轉(zhuǎn)換為socket格式后發(fā)送給業(yè)務(wù)服務(wù)器。業(yè)務(wù)服務(wù)器根據(jù)客戶端A的業(yè)務(wù)請求將客戶端A的消息推送給客戶端B,并將客戶端B返回的消息通過轉(zhuǎn)發(fā)服務(wù)器發(fā)送給推送服務(wù)器。推送服務(wù)器通過為客戶端A分配的推送通道將業(yè)務(wù)服務(wù)器返回的消息推送給客戶端A。
[0047]推送服務(wù)器將業(yè)務(wù)服務(wù)器返回的信息通過為客戶端分配的推送通道推送給客戶端,可以是:接收業(yè)務(wù)服務(wù)器返回的信息,根據(jù)信息中攜帶的用戶標(biāo)識從密碼隊列中讀取出用戶標(biāo)識對應(yīng)的用戶密碼和擾碼,生成客戶端對應(yīng)的推送通道的通道標(biāo)識;根據(jù)通道標(biāo)識將業(yè)務(wù)服務(wù)器返回的信息推送到相應(yīng)通道,使連接到推送通道的客戶端接收到信息。
[0048]實(shí)施例2:
[0049]下面以客戶端、推送服務(wù)器和業(yè)務(wù)服務(wù)器相互交互的方式說明本申請的向客戶端推送內(nèi)容的方法,其中,推送服務(wù)器采用nginx服務(wù)器,包含ngx_lua (拓展腳本)模塊和推送(push)模塊。推送服務(wù)器與業(yè)務(wù)服務(wù)器之間通過轉(zhuǎn)發(fā)服務(wù)器進(jìn)行消息格式的轉(zhuǎn)換和轉(zhuǎn)發(fā)。
[0050]步驟201:客戶端向ngx_lua模塊發(fā)送連接請求;
[0051]客戶端在需要與業(yè)務(wù)服務(wù)器建立連接時,向推送服務(wù)器發(fā)送連接請求,以通過推