国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種大并發(fā)量請(qǐng)求的處理方法及處理系統(tǒng)的制作方法

      文檔序號(hào):6372553閱讀:128來(lái)源:國(guó)知局
      專利名稱:一種大并發(fā)量請(qǐng)求的處理方法及處理系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域,具體涉及一種提高網(wǎng)絡(luò)服務(wù)器在處理大并發(fā)請(qǐng)求時(shí)的處理能力的方法及處理系統(tǒng)。
      背景技術(shù)
      數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù),隨著信息技術(shù)和市場(chǎng)的發(fā)展,數(shù)據(jù)管理不再僅僅是存儲(chǔ)和管理數(shù)據(jù),而轉(zhuǎn)變成用戶所需要的各種數(shù)據(jù)管理的方式。數(shù)據(jù)庫(kù)有很多種類型,從最簡(jiǎn)單的存儲(chǔ)有各種數(shù)據(jù)的表格到能夠進(jìn)行海量數(shù)據(jù)存儲(chǔ)的大型數(shù)據(jù)庫(kù)系統(tǒng)都在各個(gè)方面得到了廣泛的應(yīng)用。Redis (Remote Dictionary Server)是一種 key-value 的消息存儲(chǔ)系統(tǒng)。Redis提供了一些豐富的數(shù)據(jù)結(jié)構(gòu),包括 string, list, sets, ordered sets 以及 hashes。Redis 性能極高,能支持超過(guò)100K+每秒的讀寫頻率。并且Redis所有的操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作合并后的原子性執(zhí)行。Redis提供各種語(yǔ)言的客戶端支持,包括php、c等。Redis存儲(chǔ)的數(shù)據(jù)放在內(nèi)存中使用,因此讀寫性能比mysql等數(shù)據(jù)庫(kù)高很多。Nginx是一款通用、開(kāi)源、高效的HTTP服務(wù)器。Nginx現(xiàn)在市場(chǎng)份額占有12. 18%,Nginx最為顯著的特色是它的高性能、穩(wěn)定性和豐富的第三方模塊,Nginx對(duì)于高并發(fā)性有很好的表現(xiàn),它可以同時(shí)容納約100萬(wàn)的連接數(shù)。因此對(duì)于有高并發(fā)的系統(tǒng)需求來(lái)說(shuō),Nginx+Redis的結(jié)合是一個(gè)很好的選擇。輪詢結(jié)構(gòu)由于需要對(duì)服務(wù)器進(jìn)行不斷和持續(xù)的請(qǐng)求,所以對(duì)服務(wù)器的請(qǐng)求壓力很大。現(xiàn)有技術(shù)中一般使用Redis+php+Nginx作為請(qǐng)求輪詢的結(jié)構(gòu),Redis提供了各種客戶端C、C++、PHP和JAVA等。Nginx以php作為服務(wù)端腳本語(yǔ)言,php和Nginx的連接是使用php-fpm,而php-fpm是單線程工作方式,因此在Nginx中,一個(gè)php-fpm進(jìn)程只能處理一個(gè)請(qǐng)求,但是單臺(tái)服務(wù)器開(kāi)啟1000+的php-fpm,最樂(lè)觀情況下也只能有I萬(wàn)請(qǐng)求/秒的性能表現(xiàn),對(duì)于再多的php-fpm請(qǐng)求,Nginx只能延遲處理和響應(yīng),這樣不但花費(fèi)的時(shí)間長(zhǎng)效率低,而且導(dǎo)致了 Nginx和Redis這兩個(gè)在高并發(fā)下表現(xiàn)很好的產(chǎn)品的性能浪費(fèi)過(guò)多。此外現(xiàn)有技術(shù)中也有單獨(dú)使用Webdis+Redis來(lái)實(shí)現(xiàn)輪詢的,Webdis可以接受一些參數(shù)來(lái)對(duì)Redis進(jìn)行操作,但是Webdis的參數(shù)功能缺少變化,不能實(shí)現(xiàn)一些特定的轉(zhuǎn)化和判定功能(比如權(quán)限判定),因此Webdis也不能直接完成某些用戶的要求?,F(xiàn)有技術(shù)中,上述結(jié)構(gòu)在利用消息系統(tǒng)向用戶發(fā)送一個(gè)消息的時(shí)候,常規(guī)的做法就是對(duì)所有的用戶都發(fā)送一個(gè)消息,此時(shí)登錄的用戶會(huì)收到消息,而未登錄的用戶只有在下次登錄的時(shí)候才會(huì)收到消息,對(duì)于未接收的消息只能存儲(chǔ)在數(shù)據(jù)庫(kù)中,等待用戶進(jìn)行輪詢,因此這樣的作法是非常消耗資源的,而且是不必要的。

      發(fā)明內(nèi)容
      為解決現(xiàn)有技術(shù)中服務(wù)器處理高并發(fā)請(qǐng)求效率低下,而導(dǎo)致服務(wù)器和數(shù)據(jù)庫(kù)性能不能完全發(fā)揮的問(wèn)題,本發(fā)明提供一種大并發(fā)量請(qǐng)求的處理方法,其特征在于,訪問(wèn)步驟如下步驟I、服務(wù)器批量接收客戶端發(fā)送的HTTP請(qǐng)求,然后將HTTP請(qǐng)求直接進(jìn)行反向代理后轉(zhuǎn)送到HTTP代理;步驟2、HTTP代理接收到HTTP請(qǐng)求后轉(zhuǎn)換成數(shù)據(jù)庫(kù)語(yǔ)言后再發(fā)送到數(shù)據(jù)庫(kù);步驟3、數(shù)據(jù)庫(kù)在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系,再根據(jù)HTTP請(qǐng)求按對(duì)應(yīng)關(guān)系將相關(guān)數(shù)據(jù)返回給HTTP代理;步驟4、HTTP代理對(duì)接收到的數(shù)據(jù)進(jìn)行反向轉(zhuǎn)換后再返回給服務(wù)器;步驟5、服務(wù)器接到HTTP代理返回的數(shù)據(jù)后再轉(zhuǎn)化為輕量級(jí)數(shù)據(jù)交換格式返回給相應(yīng)的客戶端。優(yōu)選的所述步驟I中,服務(wù)器對(duì)接收的HTTP請(qǐng)求負(fù)載均衡到不同的HTTP代理 上。優(yōu)選的所述步驟2和步驟4中,HTTP代理是根據(jù)預(yù)定義的HTTP URL語(yǔ)義對(duì)HTTP請(qǐng)求和數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行相互轉(zhuǎn)化的。優(yōu)選的所述步驟3中,數(shù)據(jù)庫(kù)在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系的步驟如下步驟41、設(shè)置記錄注冊(cè)用戶信息的用戶隊(duì)列;步驟42、配置由待分發(fā)消息構(gòu)成的消息隊(duì)列,對(duì)待分發(fā)消息根據(jù)其不同優(yōu)先級(jí)設(shè)定不同的權(quán)重后加入到消息隊(duì)列中;步驟43、建立用戶隊(duì)列內(nèi)的用戶和消息隊(duì)列內(nèi)的待分發(fā)消息之間的映射關(guān)系;步驟44、接收HTTP代理轉(zhuǎn)送的已經(jīng)轉(zhuǎn)化為數(shù)據(jù)庫(kù)語(yǔ)言的HTTP請(qǐng)求,根據(jù)所述映射關(guān)系查找對(duì)應(yīng)所述登錄用戶的待分發(fā)消息;步驟45、從查找到的待分發(fā)消息中將權(quán)重最高的待分發(fā)消息發(fā)送給HTTP代理。優(yōu)選的所述步驟42中設(shè)定不同的權(quán)重是通過(guò)在數(shù)據(jù)庫(kù)中創(chuàng)建的類函數(shù)實(shí)現(xiàn)的。優(yōu)選的所述類函數(shù)包括了兩個(gè)公開(kāi)函數(shù)和一個(gè)私有函數(shù);所述公開(kāi)函數(shù)實(shí)現(xiàn)獲取消息隊(duì)列中權(quán)重最小的元素或權(quán)重最大的元素;所述私有函數(shù)用于保證公開(kāi)函數(shù)調(diào)用的自身原子性。優(yōu)選的所述步驟43中的映射關(guān)系是依據(jù)用戶ID與待分發(fā)消息的Value值相對(duì)應(yīng)建立,并將所述映射關(guān)系保存到數(shù)據(jù)庫(kù)中。優(yōu)選的對(duì)用戶已經(jīng)接收過(guò)的待分發(fā)消息,將其Value由該用戶的映射關(guān)系中刪除。優(yōu)選的所述步驟45中,待分發(fā)消息僅發(fā)送給用戶隊(duì)列中的登錄用戶。優(yōu)選的服務(wù)器隨時(shí)將新登錄的用戶ID加入到用戶隊(duì)列中,隨時(shí)將新的待分發(fā)消息加上權(quán)重后加入到消息隊(duì)列中,并隨時(shí)將新的待分發(fā)消息與用戶隊(duì)列中的用戶ID建立映射關(guān)系。一種大并發(fā)量請(qǐng)求的處理系統(tǒng),其特征在于,包括服務(wù)器,適于批量接收客戶端發(fā)送的HTTP請(qǐng)求,然后將HTTP請(qǐng)求直接進(jìn)行反向代理后轉(zhuǎn)送到HTTP代理;HTTP代理,適于接收到HTTP請(qǐng)求后轉(zhuǎn)換成數(shù)據(jù)庫(kù)語(yǔ)言再發(fā)送到數(shù)據(jù)庫(kù),同時(shí)對(duì)接收到的數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行反向轉(zhuǎn)換后再返回給服務(wù)器;
      數(shù)據(jù)庫(kù),適于在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系,再根據(jù)HTTP請(qǐng)求按對(duì)應(yīng)關(guān)系將相關(guān)數(shù)據(jù)返回給HTTP代理;服務(wù)器還適于接到HTTP代理返回的數(shù)據(jù)后再轉(zhuǎn)化為輕量級(jí)數(shù)據(jù)交換格式數(shù)據(jù)返回給相應(yīng)的客戶端。優(yōu)選的所述服務(wù)器進(jìn)一步包括將接收的HTTP請(qǐng)求負(fù)載均衡到不同的HTTP代理 上。優(yōu)選的所述HTTP代理是根據(jù)預(yù)定義的HTTP URL語(yǔ)義對(duì)HTTP請(qǐng)求和數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行相互轉(zhuǎn)化的。優(yōu)選的所述數(shù)據(jù)庫(kù)進(jìn)一步包括如下模塊用戶隊(duì)列模塊,設(shè)置記錄注冊(cè)用戶信息的用戶隊(duì)列;消息隊(duì)列模塊,配置由待分發(fā)消息構(gòu)成的消息隊(duì)列,對(duì)待分發(fā)消息根據(jù)其不同優(yōu)先級(jí)設(shè)定不同的權(quán)重后加入到消息隊(duì)列中;映射模塊,建立用戶隊(duì)列內(nèi)的用戶和消息隊(duì)列內(nèi)的待分發(fā)消息之間的映射關(guān)系;查詢模塊,接收登錄用戶的請(qǐng)求消息,根據(jù)映射模塊中的對(duì)應(yīng)關(guān)系查找對(duì)應(yīng)的待分發(fā)消息;發(fā)送模塊,從查找到的待分發(fā)消息中將權(quán)重最高的待分發(fā)消息發(fā)送給HTTP代理。優(yōu)選的所述消息隊(duì)列模塊中設(shè)定不同的權(quán)重是通過(guò)在數(shù)據(jù)庫(kù)中創(chuàng)建的類函數(shù)實(shí)現(xiàn)的。優(yōu)選的所述類函數(shù)包括了兩個(gè)公開(kāi)函數(shù)和一個(gè)私有函數(shù);所述公開(kāi)函數(shù)實(shí)現(xiàn)獲取消息隊(duì)列中權(quán)重最小的元素或權(quán)重最大的元素;所述私有函數(shù)用于保證公開(kāi)函數(shù)調(diào)用的自身原子性。優(yōu)選的所述映射模塊中的映射關(guān)系是依據(jù)用戶ID與待分發(fā)消息的Value值相對(duì)應(yīng)建立,并將所述映射關(guān)系保存到數(shù)據(jù)庫(kù)中。優(yōu)選的所述消息隊(duì)列模塊中,對(duì)用戶已經(jīng)接收過(guò)的待分發(fā)消息,將其Value由該用戶的映射關(guān)系中刪除。優(yōu)選的所述查詢模塊中,待分發(fā)消息僅發(fā)送給用戶隊(duì)列中的登錄用戶。優(yōu)選的用戶隊(duì)列模塊隨時(shí)將新登錄的用戶ID加入到用戶隊(duì)列中,消息隊(duì)列模塊隨時(shí)將新的待分發(fā)消息加上權(quán)重后加入到消息隊(duì)列中,映射模塊隨時(shí)將新的待分發(fā)消息與用戶隊(duì)列中的用戶ID建立映射關(guān)系。本發(fā)明利用HTTP代理調(diào)用數(shù)據(jù)庫(kù)命令實(shí)現(xiàn)一種高效的消息分發(fā)機(jī)制,在消息分發(fā)機(jī)制中,將消息接收用戶區(qū)分為登錄用戶和非登錄用戶,以在線用戶的數(shù)量作為消息分發(fā)對(duì)象,取消了未登錄用戶的消息分發(fā),大大減少了分發(fā)量。本發(fā)明利用權(quán)重的大小來(lái)區(qū)分不同優(yōu)先級(jí)的消息,在取出待分發(fā)消息時(shí),能夠根據(jù)權(quán)重的大小優(yōu)先取出重要消息,實(shí)現(xiàn)了消息的優(yōu)先分發(fā)。本發(fā)明在登錄用戶與需分發(fā)消息之間建立相互映射關(guān)系,由登錄用戶的客戶端輪詢時(shí)獲取相應(yīng)消息,減少了服務(wù)器的負(fù)擔(dān)。本方案的消息分發(fā)機(jī)制使單臺(tái)服務(wù)器能保證每秒超過(guò)幾萬(wàn)的消息分發(fā)量,對(duì)擁有大量登錄用戶的消息推送系統(tǒng)需求的產(chǎn)品來(lái)說(shuō)能提供較為穩(wěn)定的消息推送服務(wù)。


      圖I本發(fā)明中客戶端與服務(wù)器之間的請(qǐng)求處理流程圖。圖2本發(fā)明中服務(wù)器處理大并發(fā)請(qǐng)求的流程圖。圖3本發(fā)明中處理系統(tǒng)中模塊工作流程圖。圖4本發(fā)明中消息推送與客戶端之間的優(yōu)化步驟流程圖。圖5本發(fā)明中消息推送與客戶端登錄用戶之間的優(yōu)化過(guò)程示意框圖。
      具體實(shí)施例方式如圖I所示,本發(fā)明中服務(wù)器僅作為HTTP請(qǐng)求的轉(zhuǎn)送者,具體處理過(guò)程交給Webdis代理進(jìn)行處理,Webdis代理將服務(wù)器轉(zhuǎn)發(fā)的HTTP請(qǐng)求轉(zhuǎn)化成數(shù)據(jù)庫(kù)語(yǔ)言,同時(shí) 對(duì)數(shù)據(jù)庫(kù)回傳的數(shù)據(jù)進(jìn)行反向轉(zhuǎn)換,再發(fā)送給服務(wù)器,這樣服務(wù)器在減輕自身處理量的情況下,還利用Webdis代理代替了 PHP的單線程工作方式,提高了服務(wù)器處理客戶端輪詢請(qǐng)求的處理速度,本發(fā)明通過(guò)Nginx服務(wù)器和Redis數(shù)據(jù)庫(kù)的組合操作,使得原本沒(méi)有權(quán)重隊(duì)列操作的Redis數(shù)據(jù)庫(kù)有了這個(gè)功能,在消息隊(duì)列方面,本發(fā)明改進(jìn)點(diǎn)著重于消息的取出,而在用戶隊(duì)列方面,本發(fā)明利用登錄用戶和未登錄用戶的劃分來(lái)減少同時(shí)接收消息的用戶群,利用PHP和Redis數(shù)據(jù)庫(kù)的函數(shù)在消息隊(duì)列和用戶隊(duì)列之間建立映射關(guān)系,從而建立一套快速且能夠?qū)崿F(xiàn)消息優(yōu)先級(jí)分發(fā)的消息分發(fā)機(jī)制。如圖2所示,具體步驟如下101、服務(wù)器批量接收客戶端發(fā)送的HTTP請(qǐng)求,然后將HTTP請(qǐng)求直接進(jìn)行反向代理后轉(zhuǎn)送到HTTP代理;其中服務(wù)器對(duì)接收的HTTP請(qǐng)求負(fù)載均衡到不同的HTTP代理上。102、HTTP代理接收到HTTP請(qǐng)求后轉(zhuǎn)換成數(shù)據(jù)庫(kù)語(yǔ)言后再發(fā)送到數(shù)據(jù)庫(kù);HTTP代理是根據(jù)預(yù)定義的HTTP URL語(yǔ)義對(duì)HTTP請(qǐng)求和數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行相互轉(zhuǎn)化的。這里Nginx服務(wù)器與Webdis代理之間是內(nèi)部請(qǐng)求,因此網(wǎng)絡(luò)延遲消耗可以忽略。服務(wù)器為每個(gè)Redis數(shù)據(jù)庫(kù)配置一個(gè)Webdis代理,其中Nginx服務(wù)器、Redis數(shù)據(jù)庫(kù)和Webdis代理的組合在Nginx服務(wù)器的配置文件中包括如下步驟(I)、將所有客戶端的msg/sort的請(qǐng)求配置進(jìn)入locat ion/msg/sort中;(2)、將每個(gè)請(qǐng)求轉(zhuǎn)化為Webdis代理的的http請(qǐng)求格式;(3)、使用反向代理將請(qǐng)求傳送到Webdis代理_CCC_01上;(4)、配置Webdis代理的服務(wù)器地址和端口號(hào)。103、數(shù)據(jù)庫(kù)在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系,再根據(jù)HTTP請(qǐng)求按對(duì)應(yīng)關(guān)系將相關(guān)數(shù)據(jù)返回給HTTP代理;104、HTTP代理對(duì)接收到的數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行反向轉(zhuǎn)換后再返回給服務(wù)器;105、服務(wù)器接到HTTP代理返回的數(shù)據(jù)后再轉(zhuǎn)化為輕量級(jí)數(shù)據(jù)交換格式返回給相應(yīng)的客戶端。如圖4所示,其中103中,數(shù)據(jù)庫(kù)在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系的步驟如下401、設(shè)置記錄注冊(cè)用戶信息的用戶隊(duì)列;新用戶登錄客戶端后,客戶端發(fā)送HTTP請(qǐng)求usr/login告知Nginx服務(wù)器該用戶已經(jīng)登錄,Nginx服務(wù)器在Redis數(shù)據(jù)庫(kù)上建立一個(gè)由注冊(cè)用戶構(gòu)成的用戶隊(duì)列,用戶隊(duì)列隨時(shí)記錄新登錄的用戶,Nginx服務(wù)器利用PHP調(diào)用Redis數(shù)據(jù)庫(kù)自帶的rPush命令將新登錄用戶插入用戶隊(duì)列。402、配置由待分發(fā)消息構(gòu)成的消息隊(duì)列,對(duì)待分發(fā)消息根據(jù)其不同優(yōu)先級(jí)設(shè)定不同的權(quán)重后加入到消息隊(duì)列中;PHP利用Redis數(shù)據(jù)庫(kù)的zAdd命令進(jìn)行有權(quán)重的由待分發(fā)消息構(gòu)成的消息隊(duì)列的組建,腳本語(yǔ)言使用PHP,核心操作步驟實(shí)現(xiàn)了一個(gè)具體的類,代碼示例如下
      < php
      class KedisCIient extends Kedis
      f
      const POSITKK—FIRST = 0; const POSITION—LAST = -I; pub Iic function zFop(IzSet)
      return $this->zSetPop($zSet,self;:POS(TION^FfRST);
      }
      public function zRevPop($zSet)
      return $this->zSetPop($zSet self::POSITIONJ,AST); I一
      private function zSetFop($zSet, $position)
      {
      $thi s->watch (IzSet);
      Iolomoni 二 $thls->zRango(IzSets Ipositions !position); if (!issct($el omenI
      )) { return fa Ise;
      }
      if ($this—>muIti()->zRem(IzSetf $eIement
      )->exec0) { return $ol omen t
      ;
      }
      return $ Ihi s->zSotPop(IzSet, Iposi tIon);
      }上述代碼利用了 zSet結(jié)構(gòu)實(shí)現(xiàn)消息隊(duì)列中有權(quán)重的待分發(fā)消息的操作,其中這個(gè)類利用了兩個(gè)公開(kāi)函數(shù)和一個(gè)私有函數(shù),其中公開(kāi)函數(shù)zPop實(shí)現(xiàn)獲取權(quán)重最小的元素,公開(kāi)函數(shù)ZRevPop實(shí)現(xiàn)了獲取權(quán)重最大的元素,這兩個(gè)公開(kāi)函數(shù)都調(diào)用了私有函數(shù)zSetPop, zSetPop使用watch和exec來(lái)保證這個(gè)函數(shù)的原子性,在watch和exec中間的所有操作會(huì)被看成是一個(gè)原子操作。在核心操作步驟中使用zSetPop取出需要的元素(按權(quán)重最小或者權(quán)重最大確定取出的元素),當(dāng)元素不存在,行為結(jié)束;當(dāng)元素存在,返回這個(gè)元素,并且刪除這個(gè)元素。上述代碼中zSetPop先是取出需要的元素(按權(quán)重最小或者權(quán)重最大確定取出的元素),當(dāng)元素不存在,行為結(jié)束;當(dāng)元素存在,返回這個(gè)元素,并且刪除這個(gè)元素。
      待分發(fā)消息加入到消息隊(duì)列中是Nginx服務(wù)器通過(guò)PHP調(diào)用Redis數(shù)據(jù)庫(kù)的zAdd命令,而取出待分發(fā)消息是Nginx服務(wù)器通過(guò)PHP調(diào)用Redis數(shù)據(jù)庫(kù)的zPop命令,本發(fā)明中待分發(fā)消息取出順序是按權(quán)重從大到小的順序進(jìn)行的。在程序執(zhí)行過(guò)程中,zPop每次取出權(quán)重最大的元素,如果有權(quán)重相同的則依次取出同一級(jí)別的,如zPop返回為空,表示沒(méi)有待分發(fā)消息,程序直接此步驟而轉(zhuǎn)到下一步驟。前面公開(kāi)的類實(shí)現(xiàn)了消息隊(duì)列的pop操作,關(guān)于消息隊(duì)列的push操作我們通過(guò)PHP調(diào)用Redis數(shù)據(jù)庫(kù)本身的zAdd操作來(lái)實(shí)現(xiàn),具體代碼如下
      權(quán)利要求
      1.一種大并發(fā)量請(qǐng)求的處理方法,其特征在于,訪問(wèn)步驟如下 步驟I、服務(wù)器批量接收客戶端發(fā)送的HTTP請(qǐng)求,然后將HTTP請(qǐng)求直接進(jìn)行反向代理后轉(zhuǎn)送到HTTP代理; 步驟2、HTTP代理接收到HTTP請(qǐng)求后轉(zhuǎn)換成數(shù)據(jù)庫(kù)語(yǔ)言后再發(fā)送到數(shù)據(jù)庫(kù); 步驟3、數(shù)據(jù)庫(kù)在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系,再根據(jù)HTTP請(qǐng)求按對(duì)應(yīng)關(guān)系將相關(guān)數(shù)據(jù)返回給HTTP代理; 步驟4、HTTP代理對(duì)接收到的數(shù)據(jù)進(jìn)行反向轉(zhuǎn)換后再返回給服務(wù)器; 步驟5、服務(wù)器接到HTTP代理返回的數(shù)據(jù)后再轉(zhuǎn)化為輕量級(jí)數(shù)據(jù)交換格式返回給相應(yīng)的客戶端。
      2.如權(quán)利要求I所述的處理方法,其特征在于,所述步驟I中,服務(wù)器對(duì)接收的HTTP請(qǐng)求負(fù)載均衡到不同的HTTP代理上。
      3.如權(quán)利要求I所述的處理方法,其特征在于,所述步驟2和步驟4中,HTTP代理是根據(jù)預(yù)定義的HTTP URL語(yǔ)義對(duì)HTTP請(qǐng)求和數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行相互轉(zhuǎn)化的。
      4.如權(quán)利要求I所述的處理方法,其特征在于,所述步驟3中,數(shù)據(jù)庫(kù)在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系的步驟如下 步驟41、設(shè)置記錄注冊(cè)用戶信息的用戶隊(duì)列; 步驟42、配置由待分發(fā)消息構(gòu)成的消息隊(duì)列,對(duì)待分發(fā)消息根據(jù)其不同優(yōu)先級(jí)設(shè)定不同的權(quán)重后加入到消息隊(duì)列中; 步驟43、建立用戶隊(duì)列內(nèi)的用戶和消息隊(duì)列內(nèi)的待分發(fā)消息之間的映射關(guān)系; 步驟44、接收HTTP代理轉(zhuǎn)送的已經(jīng)轉(zhuǎn)化為數(shù)據(jù)庫(kù)語(yǔ)言的HTTP請(qǐng)求,根據(jù)所述映射關(guān)系查找對(duì)應(yīng)所述登錄用戶的待分發(fā)消息; 步驟45、從查找到的待分發(fā)消息中將權(quán)重最高的待分發(fā)消息發(fā)送給HTTP代理。
      5.如權(quán)利要求4所述的處理方法,其特征在于,所述步驟42中設(shè)定不同的權(quán)重是通過(guò)在數(shù)據(jù)庫(kù)中創(chuàng)建的類函數(shù)實(shí)現(xiàn)的。
      6.如權(quán)利要求5所述的處理方法,其特征在于,所述類函數(shù)包括了兩個(gè)公開(kāi)函數(shù)和一個(gè)私有函數(shù);所述公開(kāi)函數(shù)實(shí)現(xiàn)獲取消息隊(duì)列中權(quán)重最小的元素或權(quán)重最大的元素;所述私有函數(shù)用于保證公開(kāi)函數(shù)調(diào)用的自身原子性。
      7.如權(quán)利要求4所述的處理方法,其特征在于,所述步驟43中的映射關(guān)系是依據(jù)用戶ID與待分發(fā)消息的Value值相對(duì)應(yīng)建立,并將所述映射關(guān)系保存到數(shù)據(jù)庫(kù)中。
      8.如權(quán)利要求7所述的處理方法,其特征在于,對(duì)用戶已經(jīng)接收過(guò)的待分發(fā)消息,將其Value由該用戶的映射關(guān)系中刪除。
      9.如權(quán)利要求4所述的處理方法,其特征在于,所述步驟45中,待分發(fā)消息僅發(fā)送給用戶隊(duì)列中的登錄用戶。
      10.如權(quán)利要求4所述的處理方法,其特征在于,服務(wù)器隨時(shí)將新登錄的用戶ID加入到用戶隊(duì)列中,隨時(shí)將新的待分發(fā)消息加上權(quán)重后加入到消息隊(duì)列中,并隨時(shí)將新的待分發(fā)消息與用戶隊(duì)列中的用戶ID建立映射關(guān)系。
      11.一種大并發(fā)量請(qǐng)求的處理系統(tǒng),其特征在于,包括 服務(wù)器,適于批量接收客戶端發(fā)送的HTTP請(qǐng)求,然后將HTTP請(qǐng)求直接進(jìn)行反向代理后轉(zhuǎn)送到HTTP代理;HTTP代理,適于接收到HTTP請(qǐng)求后轉(zhuǎn)換成數(shù)據(jù)庫(kù)語(yǔ)言再發(fā)送到數(shù)據(jù)庫(kù),同時(shí)對(duì)接收到的數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行反向轉(zhuǎn)換后再返回給服務(wù)器; 數(shù)據(jù)庫(kù),適于在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系,再根據(jù)HTTP請(qǐng)求按對(duì)應(yīng)關(guān)系將相關(guān)數(shù)據(jù)返回給HTTP代理; 服務(wù)器還適于接到HTTP代理返回的數(shù)據(jù)后再轉(zhuǎn)化為輕量級(jí)數(shù)據(jù)交換格式數(shù)據(jù)返回給相應(yīng)的客戶端。
      12.如權(quán)利要求11所述的處理系統(tǒng),其特征在于,所述服務(wù)器進(jìn)一步包括將接收的HTTP請(qǐng)求負(fù)載均衡到不同的HTTP代理上。
      13.如權(quán)利要求11所述的處理系統(tǒng),其特征在于,所述HTTP代理是根據(jù)預(yù)定義的HTTPURL語(yǔ)義對(duì)HTTP請(qǐng)求和數(shù)據(jù)庫(kù)語(yǔ)言進(jìn)行相互轉(zhuǎn)化的。
      14.如權(quán)利要求11所述的處理系統(tǒng),其特征在于,所述數(shù)據(jù)庫(kù)進(jìn)一步包括如下模塊 用戶隊(duì)列模塊,設(shè)置記錄注冊(cè)用戶信息的用戶隊(duì)列; 消息隊(duì)列模塊,配置由待分發(fā)消息構(gòu)成的消息隊(duì)列,對(duì)待分發(fā)消息根據(jù)其不同優(yōu)先級(jí)設(shè)定不同的權(quán)重后加入到消息隊(duì)列中; 映射模塊,建立用戶隊(duì)列內(nèi)的用戶和消息隊(duì)列內(nèi)的待分發(fā)消息之間的映射關(guān)系; 查詢模塊,接收登錄用戶的請(qǐng)求消息,根據(jù)映射模塊中的對(duì)應(yīng)關(guān)系查找對(duì)應(yīng)的待分發(fā)消息; 發(fā)送模塊,從查找到的待分發(fā)消息中將權(quán)重最高的待分發(fā)消息發(fā)送給HTTP代理。
      15.如權(quán)利要求14所述的處理系統(tǒng),其特征在于,所述消息隊(duì)列模塊中設(shè)定不同的權(quán)重是通過(guò)在數(shù)據(jù)庫(kù)中創(chuàng)建的類函數(shù)實(shí)現(xiàn)的。
      16.如權(quán)利要求15所述的處理系統(tǒng),其特征在于,所述類函數(shù)包括了兩個(gè)公開(kāi)函數(shù)和一個(gè)私有函數(shù);所述公開(kāi)函數(shù)實(shí)現(xiàn)獲取消息隊(duì)列中權(quán)重最小的元素或權(quán)重最大的元素;所述私有函數(shù)用于保證公開(kāi)函數(shù)調(diào)用的自身原子性。
      17.如權(quán)利要求14所述的處理系統(tǒng),其特征在于,所述映射模塊中的映射關(guān)系是依據(jù)用戶ID與待分發(fā)消息的Value值相對(duì)應(yīng)建立,并將所述映射關(guān)系保存到數(shù)據(jù)庫(kù)中。
      18.如權(quán)利要求17所述的處理系統(tǒng),其特征在于,所述消息隊(duì)列模塊中,對(duì)用戶已經(jīng)接收過(guò)的待分發(fā)消息,將其Value由該用戶的映射關(guān)系中刪除。
      19.如權(quán)利要求14所述的處理系統(tǒng),其特征在于,所述查詢模塊中,待分發(fā)消息僅發(fā)送給用戶隊(duì)列中的登錄用戶。
      20.如權(quán)利要求14所述的處理方法,其特征在于,用戶隊(duì)列模塊隨時(shí)將新登錄的用戶ID加入到用戶隊(duì)列中,消息隊(duì)列模塊隨時(shí)將新的待分發(fā)消息加上權(quán)重后加入到消息隊(duì)列中,映射模塊隨時(shí)將新的待分發(fā)消息與用戶隊(duì)列中的用戶ID建立映射關(guān)系。
      全文摘要
      本發(fā)明公開(kāi)一種大并發(fā)量請(qǐng)求的處理方法及處理系統(tǒng)。服務(wù)器批量接收客戶端發(fā)送的HTTP請(qǐng)求,然后將HTTP請(qǐng)求直接進(jìn)行反向代理后轉(zhuǎn)送到HTTP代理;HTTP代理接收到HTTP請(qǐng)求后轉(zhuǎn)換成數(shù)據(jù)庫(kù)語(yǔ)言后再發(fā)送到數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)在各客戶端與其請(qǐng)求的數(shù)據(jù)之間建立對(duì)應(yīng)關(guān)系,再根據(jù)HTTP請(qǐng)求按對(duì)應(yīng)關(guān)系將相關(guān)數(shù)據(jù)返回給HTTP代理;HTTP代理對(duì)接收到的數(shù)據(jù)進(jìn)行反向轉(zhuǎn)換后再返回給服務(wù)器;服務(wù)器接到HTTP代理返回的數(shù)據(jù)后再轉(zhuǎn)化為輕量級(jí)數(shù)據(jù)交換格式返回給相應(yīng)的客戶端。本發(fā)明實(shí)現(xiàn)了一種高效的消息輪詢結(jié)構(gòu),對(duì)擁有大量登錄用戶的消息推送系統(tǒng)來(lái)說(shuō)能提供較為穩(wěn)定的消息推送服務(wù)。
      文檔編號(hào)G06F17/30GK102780768SQ20121022575
      公開(kāi)日2012年11月14日 申請(qǐng)日期2012年6月29日 優(yōu)先權(quán)日2012年6月29日
      發(fā)明者王博 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1