欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種多線程環(huán)境下的通信鏈接方法及中轉(zhuǎn)服務(wù)器的制造方法

文檔序號(hào):7773842閱讀:196來(lái)源:國(guó)知局
一種多線程環(huán)境下的通信鏈接方法及中轉(zhuǎn)服務(wù)器的制造方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種通信鏈接方法及中轉(zhuǎn)服務(wù)器,通信鏈接方法包括:在至少一個(gè)線程下建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;接收到包括目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,為所述網(wǎng)絡(luò)請(qǐng)求分配線程作為訪問(wèn)線程;從所述鏈接池中檢索訪問(wèn)鏈接結(jié)構(gòu),所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。本發(fā)明避免在網(wǎng)絡(luò)服務(wù)器在提供中轉(zhuǎn)服務(wù)的同時(shí)大量并發(fā)性地建立通信鏈接,減少CPU資源的消耗。
【專(zhuān)利說(shuō)明】一種多線程環(huán)境下的通信鏈接方法及中轉(zhuǎn)服務(wù)器
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)通信相關(guān)【技術(shù)領(lǐng)域】,特別是一種通信鏈接方法及中轉(zhuǎn)服務(wù)器。
【背景技術(shù)】
[0002]用戶訪問(wèn)redis服務(wù)器和mongodb服務(wù)器時(shí),由于redis服務(wù)器和mongodb服務(wù)器處于內(nèi)網(wǎng),而用戶多數(shù)從外網(wǎng)進(jìn)行訪問(wèn),因此建立了網(wǎng)絡(luò)服務(wù)器(即web服務(wù)器)作為中轉(zhuǎn)服務(wù)器。用戶通過(guò)瀏覽器向網(wǎng)絡(luò)服務(wù)器發(fā)送網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,網(wǎng)絡(luò)訪問(wèn)請(qǐng)求中包括了網(wǎng)絡(luò)地址和端口,網(wǎng)絡(luò)服務(wù)器向指定的網(wǎng)絡(luò)地址和端口建立連接,進(jìn)行網(wǎng)絡(luò)通信。
[0003]這種方式采用網(wǎng)絡(luò)服務(wù)器為眾多的用戶提供訪問(wèn)轉(zhuǎn)發(fā)服務(wù),網(wǎng)絡(luò)服務(wù)器作為用戶與redis服務(wù)器和mongodb服務(wù)器的橋梁,需要接收大量的用戶的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求。為了滿足實(shí)時(shí)性的要求,現(xiàn)有技術(shù)主要采用并發(fā)線程,對(duì)每個(gè)網(wǎng)絡(luò)訪問(wèn)請(qǐng)求網(wǎng)絡(luò)服務(wù)器均會(huì)分配一個(gè)線程進(jìn)行處理。
[0004]然而,在訪問(wèn)網(wǎng)絡(luò)的時(shí)候,需要建立通信鏈接,即每個(gè)線程均需要建立一個(gè)通信鏈接?,F(xiàn)有技術(shù)在為每個(gè)網(wǎng)絡(luò)訪問(wèn)請(qǐng)求分配線程的同時(shí),在線程下建立通信鏈接,然后在用戶訪問(wèn)完畢后關(guān)閉通信鏈接。
[0005]由于網(wǎng)絡(luò)服務(wù)器需要接收大量的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,因此會(huì)有大量的并發(fā)線程,而每個(gè)線程在訪問(wèn)網(wǎng)絡(luò)時(shí)都建立通信鏈接,從而大量并發(fā)地建立通信鏈接,從而消耗大量的CPU資源。

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

[0006]基于此,有必要針對(duì)現(xiàn)有技術(shù)采用中轉(zhuǎn)服務(wù)器在多線程環(huán)境下訪問(wèn)網(wǎng)絡(luò)時(shí),在中轉(zhuǎn)服務(wù)器提供中轉(zhuǎn)服務(wù)的同時(shí)大量并發(fā)地建立通信鏈接,造成大量的CPU資源消耗的技術(shù)問(wèn)題,提供一種多線程環(huán)境下的通信鏈接方法及中轉(zhuǎn)服務(wù)器。
[0007]—種多線程環(huán)境下的通信鏈接方法,包括:
[0008]通信鏈接建立步驟,在至少一個(gè)線程下建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),以所述線程的線程標(biāo)識(shí)作為通信線程標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0009]網(wǎng)絡(luò)訪問(wèn)請(qǐng)求接收步驟,接收包括目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,并為所述網(wǎng)絡(luò)請(qǐng)求分配訪問(wèn)線程;
[0010]通信鏈接檢索分配步驟,從所述鏈接池中檢索通信線程標(biāo)識(shí)與所述訪問(wèn)線程的線程標(biāo)識(shí)相同、且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同、且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu),所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
[0011]一種多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,包括:
[0012]通信鏈接建立模塊,在至少一個(gè)線程下建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),以所述線程的線程標(biāo)識(shí)作為通信線程標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0013]網(wǎng)絡(luò)訪問(wèn)請(qǐng)求接收模塊,接收包括目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,并為所述網(wǎng)絡(luò)請(qǐng)求分配訪問(wèn)線程;
[0014]通信鏈接檢索分配模塊,從所述鏈接池中檢索通信線程標(biāo)識(shí)與所述訪問(wèn)線程的線程標(biāo)識(shí)相同、且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同、且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu),所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
[0015]本發(fā)明事先建立通信鏈接,并將建立成功的通信鏈接采用鏈接結(jié)構(gòu)保存到鏈接池,在接收到網(wǎng)絡(luò)訪問(wèn)請(qǐng)求時(shí),通過(guò)檢索適當(dāng)?shù)逆溄咏Y(jié)構(gòu),得到關(guān)聯(lián)的通信鏈接的鏈接標(biāo)識(shí),從而避免在網(wǎng)絡(luò)服務(wù)器在提供中轉(zhuǎn)服務(wù)的同時(shí)大量并發(fā)性地建立通信鏈接,減少CPU資源的消耗。
【專(zhuān)利附圖】

【附圖說(shuō)明】
[0016]圖1為本發(fā)明一種多線程環(huán)境下的通信鏈接方法的工作流程圖;
[0017]圖2為本發(fā)明一個(gè)例子的示意圖;
[0018]圖3為本發(fā)明一種多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器的結(jié)構(gòu)模塊圖。
【具體實(shí)施方式】
[0019]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)的說(shuō)明。
[0020]如圖1所示為本發(fā)明一種多線程環(huán)境下的通信鏈接方法的工作流程圖,包括:
[0021]通信鏈接建立步驟S101,在至少一個(gè)線程下建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),以所述線程的線程標(biāo)識(shí)作為通信線程標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0022]網(wǎng)絡(luò)訪問(wèn)請(qǐng)求接收步驟S102,接收包括目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,并為所述網(wǎng)絡(luò)請(qǐng)求分配訪問(wèn)線程;
[0023]通信鏈接檢索分配步驟S103,從所述鏈接池中檢索通信線程標(biāo)識(shí)與所述訪問(wèn)線程的線程標(biāo)識(shí)相同、且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同、且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu),所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
[0024]其中通信鏈接可以采用現(xiàn)有的各種通信方式,其中最常用的是套接字通信鏈接,即socket鏈接。在與指定網(wǎng)絡(luò)地址和指定端口成功建立通信鏈接后,會(huì)得到一個(gè)用于標(biāo)識(shí)通信鏈接的鏈接標(biāo)識(shí),例如,成功建立socket鏈接時(shí),會(huì)得到一個(gè)套接字的描述符,可以用于作為所示的鏈接標(biāo)識(shí)。與指定網(wǎng)絡(luò)地址和指定端口成功建立通信鏈接即與指定網(wǎng)絡(luò)地址的服務(wù)器的指定端口成功建立通信鏈接。
[0025]在多線程環(huán)境下,每個(gè)線程都會(huì)有一個(gè)線程ID即線程標(biāo)識(shí),如果線程ID相同,則表示為同一線程,因此,在步驟S103中,檢索到通信線程標(biāo)識(shí)與所述訪問(wèn)線程的線程標(biāo)識(shí)相同的鏈接結(jié)構(gòu),則表示訪問(wèn)線程與建立該鏈接結(jié)構(gòu)的線程為同一線程,從而可以使用已經(jīng)建立好的通信鏈接。
[0026]鏈接結(jié)構(gòu)可以采用單向鏈表實(shí)現(xiàn),每個(gè)鏈接結(jié)構(gòu)定義為一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體包括所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與線程的線程ID。而當(dāng)鏈接池?cái)?shù)據(jù)量大的時(shí)候還可以用二叉樹(shù)替換單向鏈表。
[0027]采用本實(shí)施例的一種多線程環(huán)境下的通信鏈接方法的中轉(zhuǎn)服務(wù)器,事先執(zhí)行步驟S101,得到一個(gè)包括鏈接結(jié)構(gòu)的鏈接池,每個(gè)鏈接結(jié)構(gòu)包括所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與線程的線程ID。步驟S102中,網(wǎng)絡(luò)訪問(wèn)請(qǐng)求一般是用戶通過(guò)瀏覽器向中轉(zhuǎn)服務(wù)器發(fā)送網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,中轉(zhuǎn)服務(wù)器為每個(gè)網(wǎng)絡(luò)訪問(wèn)請(qǐng)求分配一個(gè)線程作為訪問(wèn)線程,該訪問(wèn)線程也有線程ID,根據(jù)訪問(wèn)線程的線程ID,以及目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口,在步驟S103中,從鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu)。其中,與所述訪問(wèn)線程關(guān)聯(lián)的鏈接結(jié)構(gòu),即該鏈接結(jié)構(gòu)的線程ID與訪問(wèn)線程的線程ID相同,同時(shí)該鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同。即得到與目標(biāo)網(wǎng)絡(luò)地址的遠(yuǎn)端服務(wù)器的目標(biāo)端口建立通信鏈接的鏈接標(biāo)識(shí),根據(jù)該鏈接標(biāo)識(shí)可以直接與目標(biāo)網(wǎng)絡(luò)地址的遠(yuǎn)端服務(wù)器的目標(biāo)端口進(jìn)行通信,而無(wú)需建立新的通信鏈接,通信鏈接是事先建立好的,因此在中轉(zhuǎn)服務(wù)器在提供中轉(zhuǎn)服務(wù)時(shí),無(wú)需建立通信鏈接,從而減少CPU資源的消耗。
[0028]在其中一個(gè)實(shí)施例中:
[0029]所述通信鏈接建立步驟中,計(jì)算由所述指定網(wǎng)絡(luò)地址和所述指定端口生成的哈希值作為指定哈希值,將所述鏈接標(biāo)識(shí)、所述指定哈希值與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0030]所述通信連接檢索分配步驟中,計(jì)算所述目標(biāo)網(wǎng)絡(luò)地址和所述目標(biāo)端口生成的哈希值作為目標(biāo)哈希值,從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定哈希值與目標(biāo)哈希值相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu)。
[0031]其中,在通信鏈接建立步驟中計(jì)算指定哈希值和在通信連接檢索分配步驟中計(jì)算目標(biāo)哈希值所采用的哈希算法一致。
[0032]本實(shí)施例在鏈接結(jié)構(gòu)中保存由所述指定網(wǎng)絡(luò)地址和所述指定端口生成的哈希值,以減少所要保存的數(shù)據(jù)量,同時(shí)提高檢索效率。
[0033]在其中一個(gè)實(shí)施例中,所述通信鏈接檢索分配步驟S103,還包括:
[0034]如果從所述鏈接池中檢索不到與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu),則將所述目標(biāo)網(wǎng)絡(luò)地址作為指定網(wǎng)絡(luò)地址,將所述目標(biāo)端口作為指定端口,建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述線程關(guān)聯(lián)作為訪問(wèn)鏈接結(jié)構(gòu),將所述訪問(wèn)鏈接結(jié)構(gòu)保存到鏈接池,所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
[0035]本實(shí)施例當(dāng)在鏈接池中找不到合適的鏈接結(jié)構(gòu)時(shí),新建立通信鏈接,并生成相應(yīng)的鏈接結(jié)構(gòu),以供后續(xù)使用。
[0036]在其中一個(gè)實(shí)施例中,所述通信鏈接檢索分配步驟S103,具體包括:
[0037]從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相冋的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu);
[0038]對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,如果網(wǎng)絡(luò)鏈接診斷成功,則所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信,如果網(wǎng)絡(luò)鏈接診斷失敗,則從所述鏈接池刪除所述訪問(wèn)鏈接結(jié)構(gòu)。
[0039]本實(shí)施例對(duì)訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,該網(wǎng)絡(luò)鏈接診斷,現(xiàn)有最常用的方式是采用Ping鏈接,即Ping鏈接訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口,如果網(wǎng)絡(luò)鏈接診斷成功,即能夠Ping通,則證明訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址的遠(yuǎn)端服務(wù)器的指定端口仍然能提供服務(wù),因此所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信,否則,網(wǎng)絡(luò)鏈接診斷失敗,即不能夠Ping通時(shí),可以判斷訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址的遠(yuǎn)端服務(wù)器的指定端口無(wú)法提供服務(wù),則從所述鏈接池刪除所述訪問(wèn)鏈接結(jié)構(gòu)。本實(shí)施例通過(guò)網(wǎng)絡(luò)鏈接診斷提前確定訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址的遠(yuǎn)端服務(wù)器的指定端口是否還能提供服務(wù),從而能夠?yàn)樵L問(wèn)線程提供一個(gè)可靠的鏈接標(biāo)識(shí),同時(shí),當(dāng)網(wǎng)絡(luò)鏈接診斷失敗,將訪問(wèn)鏈接結(jié)構(gòu)刪除,則可以重新建立一個(gè)新的可靠的通信鏈接。
[0040]在其中一個(gè)實(shí)施例中:
[0041]所述通信鏈接建立步驟SlOl中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0042]所述通信鏈接檢索分配步驟S103中,如果所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)檢查時(shí)間閾值,則對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,并更新所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間為對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)進(jìn)行網(wǎng)絡(luò)鏈接診斷的時(shí)間。
[0043]本實(shí)施例,通過(guò)在鏈接結(jié)構(gòu)中增加最后訪問(wèn)時(shí)間,使得可以根據(jù)最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值判斷是否需要進(jìn)行網(wǎng)絡(luò)鏈接診斷,以避免過(guò)于頻繁地連接指定網(wǎng)絡(luò)地址的遠(yuǎn)端服務(wù)器的指定端口。優(yōu)選地,預(yù)設(shè)檢查時(shí)間閾值可以為5秒。
[0044]在其中一個(gè)實(shí)施例中,還包括定時(shí)清理步驟:
[0045]所述通信鏈接建立步驟SlOl中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0046]所述通信鏈接檢索分配步驟S103中,將所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間更新為所述訪問(wèn)線程采用所述訪問(wèn)鏈接標(biāo)識(shí)從所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信的時(shí)間;
[0047]所述定時(shí)清理步驟,每隔預(yù)設(shè)清理時(shí)間,則檢查所述鏈接池中的所有鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間,刪除最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)的清理閾值的鏈接結(jié)構(gòu)。
[0048]本實(shí)施例可以避免建立的通信來(lái)鏈接長(zhǎng)時(shí)間沒(méi)有訪問(wèn)的時(shí)候也長(zhǎng)期占用通信鏈接資源,導(dǎo)致其他程序連接不上遠(yuǎn)端服務(wù)器的情況。
[0049]在其中一個(gè)實(shí)施例中:
[0050]當(dāng)其中一個(gè)線程將建立的鏈接結(jié)構(gòu)保存到鏈接池時(shí),阻塞其他線程對(duì)鏈接池的操作;[0051]當(dāng)其中一個(gè)線程對(duì)鏈接池進(jìn)行檢索時(shí),允許其他線程對(duì)鏈接池進(jìn)行檢索。
[0052]本實(shí)施例采用了讀寫(xiě)鎖保證線程安全訪問(wèn)鏈接池。
[0053]如圖2所示為本發(fā)明一個(gè)例子的示意圖。
[0054]其中,中轉(zhuǎn)服務(wù)器21的IP地址為:192.168.206.193,Redis服務(wù)器23的Redis訪問(wèn)進(jìn)程在192.168.206.84:8341上提供服務(wù)。
[0055]中轉(zhuǎn)服務(wù)器21在鏈接池25中使用單向鏈表保存鏈接結(jié)構(gòu),鏈接結(jié)構(gòu)定義為一個(gè)結(jié)構(gòu)體,該結(jié)構(gòu)體包含linux socket成員、hash字符串成員、線程ID成員、最后訪問(wèn)時(shí)間成員等。Hash字符串由IP和端口組成,是線程查找對(duì)應(yīng)鏈接的一個(gè)依據(jù)。Linux socket成員是與指定網(wǎng)絡(luò)地址和指定端口建立的非阻塞socket鏈接的套接字的描述符。例如,其中一個(gè)linux socket成員是與192.168.206.84:8341建立socket鏈接的套接字的描述符。中轉(zhuǎn)服務(wù)器21對(duì)同一個(gè)hash字符串在創(chuàng)建時(shí)分配多個(gè)線程并保存。當(dāng)鏈接池?cái)?shù)據(jù)量大的時(shí)候可以用二叉樹(shù)替換鏈表,而且可以保持編程接口不變。
[0056]當(dāng)瀏覽器用戶221或者瀏覽器用戶222或者瀏覽器用戶223向中轉(zhuǎn)服務(wù)器21發(fā)出網(wǎng)絡(luò)訪問(wèn)請(qǐng)求時(shí),中轉(zhuǎn)服務(wù)器21先為其分配訪問(wèn)線程241、訪問(wèn)線程242、訪問(wèn)線程243,然后,根據(jù)網(wǎng)絡(luò)訪問(wèn)請(qǐng)求的目標(biāo)IP,端口構(gòu)造hash字符串,然后在鏈接池25里根據(jù)hash字符串和訪問(wèn)線程的線程ID查詢對(duì)應(yīng)的鏈接結(jié)構(gòu)251、鏈接結(jié)構(gòu)252、鏈接結(jié)構(gòu)253。由于瀏覽器用戶221、瀏覽器用戶222、瀏覽器用戶223均需要訪問(wèn)Redis服務(wù)器23的Redis訪問(wèn)進(jìn)程,因此,鏈接結(jié)構(gòu)251、鏈接結(jié)構(gòu)252、鏈接結(jié)構(gòu)253均指向Redis服務(wù)器23的Redis訪問(wèn)進(jìn)程,即 192.168.206.84:8341。
[0057]如果找到對(duì)應(yīng)的鏈接結(jié)構(gòu),則做鏈接健康檢查:
[0058]鏈接健康檢查的策略是:根據(jù)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間和當(dāng)前時(shí)間做對(duì)比,5秒內(nèi)沒(méi)有做過(guò)檢查的做ping連接偵測(cè),5秒做過(guò)檢查的不做處理,避免過(guò)于頻繁訪問(wèn)。如果ping連接偵測(cè)失敗,則從鏈接池中刪除該鏈接結(jié)構(gòu),如果ping連接偵測(cè)成功,則訪問(wèn)線程采用該鏈接結(jié)構(gòu)的linux socket成員與遠(yuǎn)端服務(wù)器進(jìn)行通信,例如采用與192.168.206.84:8341建立socket鏈接的套接字的描述符,與Redis服務(wù)器23的Redis訪問(wèn)進(jìn)程建立通信。
[0059]如果找不到對(duì)應(yīng)的鏈接結(jié)構(gòu),則創(chuàng)建非阻塞socket,設(shè)置連接超時(shí)時(shí)間、接收數(shù)據(jù)超時(shí)時(shí)間、發(fā)送數(shù)據(jù)超時(shí)時(shí)間,在成功建立后得到對(duì)應(yīng)的套接字的描述符,創(chuàng)建新的鏈接結(jié)構(gòu),設(shè)置hash字符串成員、線程ID成員、最后訪問(wèn)時(shí)間成員、linux socket成員,并作為鏈接結(jié)構(gòu)的成員存入鏈接池。同時(shí),訪問(wèn)線程采用該鏈接結(jié)構(gòu)的linux socket成員與遠(yuǎn)端服務(wù)器進(jìn)行通信。
[0060]另外,中轉(zhuǎn)服務(wù)器21采用POSIX Linux讀寫(xiě)鎖來(lái)保證線程安全訪問(wèn)鏈接池,具體如下:
[0061]在鏈接池中存入或刪除鏈接結(jié)構(gòu)時(shí),以寫(xiě)模式的讀寫(xiě)鎖進(jìn)行操作,其他線程阻塞,不得操作。
[0062]從鏈接池中查詢時(shí),以讀模式的讀寫(xiě)鎖進(jìn)行操作,其他線程可以并行執(zhí)行查詢。
[0063]最后,啟動(dòng)一個(gè)單獨(dú)的超時(shí)檢查線程26,每5分鐘檢查一次鏈接池中的鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間成員,從鏈接池中刪除超過(guò)5分鐘沒(méi)有使用的鏈接結(jié)構(gòu)。以避免沒(méi)有訪問(wèn)的時(shí)候也長(zhǎng)期占用socket鏈接資源,其他程序連接不上遠(yuǎn)端服務(wù)器的情況。[0064]測(cè)試結(jié)果:
[0065]CPU 使用率降低 39.50% (99.5%->60.2%)
[0066]每秒響應(yīng)請(qǐng)求數(shù)提高92.64%(6855.71fetches/sec->13206.6fetches/sec)
[0067]測(cè)試數(shù)據(jù):
[0068]中轉(zhuǎn)服務(wù)器21的進(jìn)程環(huán)境:
[0069]Centos6.3 ;
[0070]linux kernel2.6.32—279.el6.x86_64 ;
[0071]CPU:AMD Opteron(TM)Processor6220?
[0072]Redis服務(wù)器23進(jìn)程環(huán)境:
[0073]Centos6.3 ;
[0074]linux kernel2.6.32—279.el6.x86_64 ;
[0075]CPU:1ntel (R)Xeon(R) CPU Ε5_26200@2.0OGHz ;
[0076](24核cpu環(huán)境下,滿負(fù)荷為2400%)
[0077]并發(fā)500請(qǐng)求Redis服務(wù)器:
[0078]I)不使用鏈接池的情況:
[0079]Redis服務(wù)器進(jìn)程CPU使用率為99.5% (滿負(fù)荷為2400%),每秒響應(yīng)請(qǐng)求次數(shù):6855.71fetches/sec。
[0080]2)使用鏈接池的情況
[0081]Redis服務(wù)器進(jìn)程CPU使用率為60.2%(滿負(fù)荷為2400%),CPU使用率降低39.50%
[0082]請(qǐng)求結(jié)果:每秒響應(yīng)請(qǐng)求次數(shù):13206.6fetches/sec,每秒響應(yīng)請(qǐng)求數(shù)提高(13206.6-6855.71) X 100%/6855.71=92.64%。
[0083]如圖3所示為本發(fā)明一種多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器的結(jié)構(gòu)模塊圖,包括:
[0084]通信鏈接建立模塊301,在至少一個(gè)線程下建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),以所述線程的線程標(biāo)識(shí)作為通信線程標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0085]網(wǎng)絡(luò)訪問(wèn)請(qǐng)求接收模塊302,接收包括目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,并為所述網(wǎng)絡(luò)請(qǐng)求分配訪問(wèn)線程;
[0086]通信鏈接檢索分配模塊303,從所述鏈接池中檢索通信線程標(biāo)識(shí)與所述訪問(wèn)線程的線程標(biāo)識(shí)相同、且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同、且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu),所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
[0087]在其中一個(gè)實(shí)施例中:
[0088]所述通信鏈接建立模塊301中,計(jì)算由所述指定網(wǎng)絡(luò)地址和所述指定端口生成的哈希值作為指定哈希值,將所述鏈接標(biāo)識(shí)、所述指定哈希值與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0089]所述通信連接檢索分配模塊303中,計(jì)算所述目標(biāo)網(wǎng)絡(luò)地址和所述目標(biāo)端口生成的哈希值作為目標(biāo)哈希值,從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定哈希值與目標(biāo)哈希值相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu)。
[0090]在其中一個(gè)實(shí)施例中,所述通信鏈接檢索分配模塊303,還包括:
[0091]如果從所述鏈接池中檢索不到與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu),則將所述目標(biāo)網(wǎng)絡(luò)地址作為指定網(wǎng)絡(luò)地址,將所述目標(biāo)端口作為指定端口,建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述線程關(guān)聯(lián)作為訪問(wèn)鏈接結(jié)構(gòu),將所述訪問(wèn)鏈接結(jié)構(gòu)保存到鏈接池,所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
[0092]在其中一個(gè)實(shí)施例中,所述通信鏈接檢索分配模塊303,具體包括:
[0093]從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相冋的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu);
[0094]對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,如果網(wǎng)絡(luò)鏈接診斷成功,則所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信,如果網(wǎng)絡(luò)鏈接診斷失敗,則從所述鏈接池刪除所述訪問(wèn)鏈接結(jié)構(gòu)。
[0095]在其中一個(gè)實(shí)施例中:
[0096]所述通信鏈接建立模塊301中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0097]所述通信鏈接檢索分配模塊303中,如果所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)檢查時(shí)間閾值,則對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,并更新所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間為對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)進(jìn)行網(wǎng)絡(luò)鏈接診斷的時(shí)間。
[0098]在其中一個(gè)實(shí)施例中,還包括定時(shí)清理模塊:
[0099]所述通信鏈接建立模塊301中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池;
[0100]所述通信鏈接檢索分配模塊303中,將所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間更新為所述訪問(wèn)線程采用所述訪問(wèn)鏈接標(biāo)識(shí)從所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信的時(shí)間;
[0101]所述定時(shí)清理模塊,每隔預(yù)設(shè)清理時(shí)間,則檢查所述鏈接池中的所有鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間,刪除最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)的清理閾值的鏈接結(jié)構(gòu)。
[0102]在其中一個(gè)實(shí)施例中:
[0103]當(dāng)其中一個(gè)線程將建立的鏈接結(jié)構(gòu)保存到鏈接池時(shí),阻塞其他線程對(duì)鏈接池的操作;
[0104]當(dāng)其中一個(gè)線程對(duì)鏈接池進(jìn)行檢索時(shí),允許其他線程對(duì)鏈接池進(jìn)行檢索。
[0105]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專(zhuān)利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專(zhuān)利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種多線程環(huán)境下的通信鏈接方法,其特征在于,包括: 通信鏈接建立步驟,在至少一個(gè)線程下建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),以所述線程的線程標(biāo)識(shí)作為通信線程標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 網(wǎng)絡(luò)訪問(wèn)請(qǐng)求接收步驟,接收包括目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,并為所述網(wǎng)絡(luò)請(qǐng)求分配訪問(wèn)線程; 通信鏈接檢索分配步驟,從所述鏈接池中檢索通信線程標(biāo)識(shí)與所述訪問(wèn)線程的線程標(biāo)識(shí)相同、且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同、且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu),所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
2.根據(jù)權(quán)利要求1所述的多線程環(huán)境下的通信鏈接方法,其特征在于: 所述通信鏈接建立步驟中,計(jì)算由所述指定網(wǎng)絡(luò)地址和所述指定端口生成的哈希值作為指定哈希值,將所述鏈接標(biāo)識(shí)、所述指定哈希值與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 所述通信連接檢索分配步驟中,計(jì)算所述目標(biāo)網(wǎng)絡(luò)地址和所述目標(biāo)端口生成的哈希值作為目標(biāo)哈希值,從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定哈希值與目標(biāo)哈希值相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu)。
3.根據(jù)權(quán)利要求1所述的多線程環(huán)境下的通信鏈接方法,其特征在于,所述通信鏈接檢索分配步驟,還包括: 如果從所述鏈接池中檢索不到與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu),則將所述目標(biāo)網(wǎng)絡(luò)地址作為指定網(wǎng)絡(luò)地址,將所述目標(biāo)端口作為指定端口,建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述線程關(guān)聯(lián)作為訪問(wèn)鏈接結(jié)構(gòu),將所述訪問(wèn)鏈接結(jié)構(gòu)保存到鏈接池,所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
4.根據(jù)權(quán)利要求1所述的多線程環(huán)境下的通信鏈接方法,其特征在于,所述通信鏈接檢索分配步驟,具體包括: 從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu); 對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,如果網(wǎng)絡(luò)鏈接診斷成功,則所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信,如果網(wǎng)絡(luò)鏈接診斷失敗,則從所述鏈接池刪除所述訪問(wèn)鏈接結(jié)構(gòu)。
5.根據(jù)權(quán)利要求4所述的多線程環(huán)境下的通信鏈接方法,其特征在于: 所述通信鏈接建立步驟中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 所述通信鏈接檢索分配步驟中,如果所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)檢查時(shí)間閾值,則對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,并更新所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間為對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)進(jìn)行網(wǎng)絡(luò)鏈接診斷的時(shí)間。
6.根據(jù)權(quán)利要求1所述的多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于,還包括定時(shí)清理步驟: 所述通信鏈接建立步驟中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 所述通信鏈接檢索分配步驟中,將所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間更新為所述訪問(wèn)線程采用所述訪問(wèn)鏈接標(biāo)識(shí)從所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信的時(shí)間; 所述定時(shí)清理步驟,每隔預(yù)設(shè)清理時(shí)間,檢查所述鏈接池中的所有鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間,刪除最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)的清理閾值的鏈接結(jié)構(gòu)。
7.根據(jù)權(quán)利要求1所述的多線程環(huán)境下的通信鏈接方法,其特征在于: 當(dāng)其中一個(gè)線程將建立的鏈接結(jié)構(gòu)保存到鏈接池時(shí),阻塞其他線程對(duì)鏈接池的操作; 當(dāng)其中一個(gè)線程對(duì)鏈接池進(jìn)行檢索時(shí),允許其他線程對(duì)鏈接池進(jìn)行檢索。
8.一種多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于,包括: 通信鏈接建立模塊,在至少一個(gè)線程下建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),以所述線程的線程標(biāo)識(shí)作為通信線程標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 網(wǎng)絡(luò)訪問(wèn)請(qǐng)求接收模塊,接收包括目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口的網(wǎng)絡(luò)訪問(wèn)請(qǐng)求,并為所述網(wǎng)絡(luò)請(qǐng)求分配訪問(wèn)線程; 通信鏈接檢索分配模塊,從所述鏈接池中檢索通信線程標(biāo)識(shí)與所述訪問(wèn)線程的線程標(biāo)識(shí)相同、且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同、且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu),所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
9.根據(jù)權(quán)利要求8所述的多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于: 所述通信鏈接建立模塊中,計(jì)算由所述指定網(wǎng)絡(luò)地址和所述指定端口生成的哈希值作為指定哈希值,將所述鏈接標(biāo)識(shí)、所述指定哈希值與所述通信線程標(biāo)識(shí)相關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 所述通信連接檢索分配模塊中,計(jì)算所述目標(biāo)網(wǎng)絡(luò)地址和所述目標(biāo)端口生成的哈希值作為目標(biāo)哈希值,從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定哈希值與目標(biāo)哈希值相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu)。
10.根據(jù)權(quán)利要求8所述的多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于,所述通信鏈接檢索分配模塊,還包括: 如果從所述鏈接池中檢索不 到與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu),則將所述目標(biāo)網(wǎng)絡(luò)地址作為指定網(wǎng)絡(luò)地址,將所述目標(biāo)端口作為指定端口,建立到指定網(wǎng)絡(luò)地址和指定端口的通信鏈接,在所述通信鏈接建立成功后,得到所述通信鏈接的鏈接標(biāo)識(shí),將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口與所述線程關(guān)聯(lián)作為訪問(wèn)鏈接結(jié)構(gòu),將所述訪問(wèn)鏈接結(jié)構(gòu)保存到鏈接池,所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信。
11.根據(jù)權(quán)利要求8所述的多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于,所述通信鏈接檢索分配模塊,具體包括: 從所述鏈接池中檢索與所述訪問(wèn)線程關(guān)聯(lián)且指定網(wǎng)絡(luò)地址與目標(biāo)網(wǎng)絡(luò)地址相同且指定端口與目標(biāo)端口相同的鏈接結(jié)構(gòu)作為訪問(wèn)鏈接結(jié)構(gòu); 對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,如果網(wǎng)絡(luò)鏈接診斷成功,則所述訪問(wèn)線程采用所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)與所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信,如果網(wǎng)絡(luò)鏈接診斷失敗,則從所述鏈接池刪除所述訪問(wèn)鏈接結(jié)構(gòu)。
12.根據(jù)權(quán)利要求11所述的多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于: 所述通信鏈接建立模塊中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 所述通信鏈接檢索分配模塊中,如果所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)檢查時(shí)間閾值,則對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的指定網(wǎng)絡(luò)地址和指定端口進(jìn)行網(wǎng)絡(luò)鏈接診斷,并更新所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間為對(duì)所述訪問(wèn)鏈接結(jié)構(gòu)的鏈接標(biāo)識(shí)進(jìn)行網(wǎng)絡(luò)鏈接診斷的時(shí)間。
13.根據(jù)權(quán)利要求8所述的多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于,還包括定時(shí)清理模塊: 所述通信鏈接建立模塊中,將在所述通信鏈接建立成功的時(shí)間作為最后訪問(wèn)時(shí)間,并將所述鏈接標(biāo)識(shí)、所述指定網(wǎng)絡(luò)地址、所述指定端口、所述最后訪問(wèn)時(shí)間與所述線程關(guān)聯(lián)作為鏈接結(jié)構(gòu),將所述鏈接結(jié)構(gòu)保存到鏈接池; 所述通信鏈接檢索分配模塊中,將所述訪問(wèn)鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間更新為所述訪問(wèn)線程采用所述訪問(wèn)鏈接標(biāo)識(shí)從所述目標(biāo)網(wǎng)絡(luò)地址和目標(biāo)端口進(jìn)行通信的時(shí)間; 所述定時(shí)清理模塊,每隔預(yù)設(shè)清理時(shí)間,則檢查所述鏈接池中的所有鏈接結(jié)構(gòu)的最后訪問(wèn)時(shí)間,刪除最后訪問(wèn)時(shí)間與當(dāng)前時(shí)間的差值超過(guò)預(yù)設(shè)的清理閾值的鏈接結(jié)構(gòu)。
14.根據(jù)權(quán)利要求8所述的多線程環(huán)境下的通信鏈接中轉(zhuǎn)服務(wù)器,其特征在于: 當(dāng)其中一個(gè)線程將建立的鏈接結(jié)構(gòu)保存到鏈接池時(shí),阻塞其他線程對(duì)鏈接池的操作; 當(dāng)其中一個(gè)線程對(duì)鏈接池進(jìn)行檢索時(shí),允許其他線程對(duì)鏈接池進(jìn)行檢索。
【文檔編號(hào)】H04L29/08GK103561060SQ201310488550
【公開(kāi)日】2014年2月5日 申請(qǐng)日期:2013年10月17日 優(yōu)先權(quán)日:2013年10月17日
【發(fā)明者】劉壘 申請(qǐng)人:北京京東尚科信息技術(shù)有限公司, 北京京東世紀(jì)貿(mào)易有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
涿鹿县| 西平县| 大丰市| 天柱县| 漳州市| 赤水市| 阿拉善左旗| 平顶山市| 泗水县| 屏南县| 佛坪县| 张北县| 凤冈县| 寿光市| 界首市| 固安县| 轮台县| 松滋市| 林口县| 五峰| 陇南市| 滦平县| 钟祥市| 贵南县| 焉耆| 宕昌县| 饶平县| 崇左市| 金昌市| 湟中县| 九寨沟县| 金溪县| 琼中| 叙永县| 白朗县| 霞浦县| 新安县| 郴州市| 渑池县| 连江县| 阿拉尔市|