一種物聯(lián)網(wǎng)的通信方法、裝置及服務(wù)器的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通訊領(lǐng)域,特別是涉及一種物聯(lián)網(wǎng)的通信方法、裝置及服務(wù)器。
【背景技術(shù)】
[0002]近年來隨著物聯(lián)網(wǎng)的發(fā)展,越來越多的終端都具有網(wǎng)絡(luò)功能,并且需要連接到服務(wù)器,用戶通過服務(wù)器可以遠(yuǎn)程操作終端設(shè)備,服務(wù)器需要一套高效,穩(wěn)定的通信系統(tǒng)來支撐設(shè)備的連接以及收發(fā)數(shù)據(jù)。
[0003]目前大多通訊系統(tǒng)存在以下缺點(diǎn):
[0004](I)隨著連接的設(shè)備數(shù)增多,通訊系統(tǒng)的運(yùn)行壓力將增大,基于單線程的select和印oil模型不無法滿足系統(tǒng)的socket的讀寫要求,且設(shè)備發(fā)送的包很頻繁,將堵塞服務(wù)器業(yè)務(wù)線程的處理;(2)設(shè)備發(fā)送的數(shù)據(jù)包存在邏輯的順序性,但到服務(wù)器接收后進(jìn)行多線程處理,將導(dǎo)致無序(應(yīng)該要保證數(shù)據(jù)的順序);(3)服務(wù)器不能根據(jù)接收包的速率來自動調(diào)整服務(wù)器的運(yùn)行負(fù)載;⑷服務(wù)器不能實(shí)時添加和/或刪除注冊網(wǎng)絡(luò)任務(wù);(5)有時系統(tǒng)經(jīng)常發(fā)生死鎖問題,如果死鎖發(fā)生,系統(tǒng)將無響應(yīng)并影響系統(tǒng)的吞吐量。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種物聯(lián)網(wǎng)的通信方法、裝置及服務(wù)器,至少解決現(xiàn)有技術(shù)中,基于單線程的select和印oil模型不無法滿足系統(tǒng)的socket的讀寫要求,且設(shè)備發(fā)送的包很頻繁,將堵塞服務(wù)器業(yè)務(wù)線程的處理的問題。
[0006]為解決上述技術(shù)問題,一方面,本發(fā)明提供一種物聯(lián)網(wǎng)的通信方法,包括:設(shè)置多個第一選擇器Selector,以從連接隊(duì)列中多線程接收連接請求;根據(jù)所述多個第一Selector接收數(shù)據(jù)的數(shù)量,確定一個第一 Selector接收當(dāng)前處于所述連接隊(duì)列最前端的連接請求;根據(jù)所述連接請求建立與設(shè)備側(cè)的連接。
[0007]進(jìn)一步,根據(jù)所述連接請求建立與設(shè)備側(cè)的連接之后,還包括:根據(jù)預(yù)設(shè)條件確定是否接收來自設(shè)備側(cè)的發(fā)送消息;在確定接收所述發(fā)送消息的情況下,從預(yù)設(shè)的多個第二Selector中,確定一個第二 Selector接收所述發(fā)送消息;將所述發(fā)送消息添加到接收隊(duì)列中,以等待對所述發(fā)送消息進(jìn)行處理。
[0008]進(jìn)一步,根據(jù)預(yù)設(shè)條件確定是否接收來自設(shè)備側(cè)的發(fā)送消息包括:將各個第二Selector當(dāng)前接收數(shù)據(jù)的數(shù)量與預(yù)設(shè)第一數(shù)量進(jìn)行比較,并在所述當(dāng)前接收數(shù)據(jù)的數(shù)量沒有達(dá)到所述預(yù)設(shè)第一數(shù)量的情況下,確定接收所述發(fā)送消息;和/或,檢測各接收隊(duì)列中接收消息的數(shù)量,將所述接收消息的數(shù)量與預(yù)設(shè)第二數(shù)量進(jìn)行比較,并在所述接收消息的數(shù)量沒有達(dá)到預(yù)設(shè)第二數(shù)量的情況下,確定接收所述發(fā)送消息。
[0009]進(jìn)一步,確定一個Selector接收所述連接請求或所述發(fā)送消息包括:為所述多個Selector接收數(shù)據(jù)的數(shù)量由大到小進(jìn)行排序,選擇接收數(shù)據(jù)的數(shù)量最小的Selector接收當(dāng)前待接收的所述連接請求或所述發(fā)送消息;在接收所述連接請求或所述發(fā)送消息后,為所述接收數(shù)據(jù)的數(shù)量最小的Selector更新接收數(shù)據(jù)的數(shù)量。
[0010]進(jìn)一步,在所述設(shè)置多個第一選擇器Selector,以從連接隊(duì)列中多線程接收連接請求之前,還包括:判斷用于接收設(shè)備側(cè)注冊消息的注冊隊(duì)列是否為空;在所述注冊隊(duì)列為非空的情況下,將來自所述注冊消息添加到一個第三Selector中,以實(shí)現(xiàn)設(shè)備側(cè)的注
ΠΠ.Ws O
[0011]進(jìn)一步,將所述發(fā)送消息添加到接收隊(duì)列中,以等待對所述發(fā)送消息進(jìn)行處理之后,還包括:對所述發(fā)送消息進(jìn)行處理;將處理后的發(fā)送消息添加到發(fā)送隊(duì)列中,并將所述發(fā)送隊(duì)列的狀態(tài)標(biāo)志位設(shè)置為發(fā)送狀態(tài);在所述處理后的發(fā)送消息發(fā)送完成后,將所述發(fā)送隊(duì)列的狀態(tài)標(biāo)志位設(shè)置為空閑狀態(tài),以等待接收下一個處理后的發(fā)送消息。
[0012]進(jìn)一步,根據(jù)所述連接請求建立與設(shè)備側(cè)的連接之后,還包括:判斷用于取消設(shè)備側(cè)注冊消息的取消隊(duì)列是否為空;在所述注冊隊(duì)列為非空的情況下,將所述取消隊(duì)列中取消注冊消息對應(yīng)的設(shè)備進(jìn)行刪除。
[0013]另一方面,本發(fā)明還提供了一種物聯(lián)網(wǎng)的通信裝置,包括:接收模塊,用于通過預(yù)先設(shè)置的多個第一選擇器Selector,從連接隊(duì)列中多線程接收連接請求;第一確定模塊,用于根據(jù)多個第一 Selector接收數(shù)據(jù)的數(shù)量,確定一個第一 Selector接收當(dāng)前處于所述連接隊(duì)列最前端的連接請求;連接模塊,用于根據(jù)所述連接請求建立與設(shè)備側(cè)的連接。
[0014]進(jìn)一步,所述裝置還包括:第二確定模塊,用于根據(jù)預(yù)設(shè)條件確定是否接收來自設(shè)備側(cè)的發(fā)送消息;選擇模塊,用于在確定接收所述發(fā)送消息的情況下,從預(yù)設(shè)的多個第二Selector中,確定一個第二 Selector接收所述發(fā)送消息;第一添加模塊,用于將所述發(fā)送消息添加到接收隊(duì)列中,以等待對所述發(fā)送消息進(jìn)行處理。
[0015]進(jìn)一步,所述裝置還包括:第一判斷模塊,用于判斷用于接收設(shè)備側(cè)注冊消息的注冊隊(duì)列是否為空;第二添加模塊,用于在所述注冊隊(duì)列為非空的情況下,將來自所述注冊消息添加到一個第三Selector中,以實(shí)現(xiàn)設(shè)備側(cè)的注冊。
[0016]進(jìn)一步,所述裝置還包括:處理模塊,用于對所述發(fā)送消息進(jìn)行處理;設(shè)置模塊,用于將處理后的發(fā)送消息添加到發(fā)送隊(duì)列中,并將所述發(fā)送隊(duì)列的狀態(tài)標(biāo)志位設(shè)置為發(fā)送狀態(tài);并在所述處理后的發(fā)送消息發(fā)送完成后,將所述發(fā)送隊(duì)列的狀態(tài)標(biāo)志位設(shè)置為空閑狀態(tài),以等待接收下一個處理后的發(fā)送消息。
[0017]進(jìn)一步,所述裝置還包括:第二判斷模塊,用于在根據(jù)所述連接請求建立與設(shè)備側(cè)的連接之后,判斷用于取消設(shè)備側(cè)注冊消息的取消隊(duì)列是否為空;刪除模塊,用于在所述注冊隊(duì)列為非空的情況下,將所述取消隊(duì)列中取消注冊消息對應(yīng)的設(shè)備進(jìn)行刪除。
[0018]又一方面,本發(fā)明還提供了一種服務(wù)器,包括:上述任一項(xiàng)的物聯(lián)網(wǎng)的通信裝置。
[0019]本發(fā)明設(shè)置了多個Selector,多個Selector可以從連接隊(duì)列中多線程接收連接請求,進(jìn)而并行處理多個連接請求,服務(wù)器的處理速度更快,解決了現(xiàn)有技術(shù)中,基于單線程的select和印oil模型不無法滿足系統(tǒng)的socket的讀寫要求,且設(shè)備發(fā)送的包很頻繁,將堵塞服務(wù)器業(yè)務(wù)線程的處理的問題。
【附圖說明】
[0020]圖1是本發(fā)明實(shí)施例中物聯(lián)網(wǎng)的通信方法的流程圖;
[0021]圖2是本發(fā)明實(shí)施例中物聯(lián)網(wǎng)的通信裝置的第一結(jié)構(gòu)示意圖;
[0022]圖3是本發(fā)明實(shí)施例中物聯(lián)網(wǎng)的通信裝置的第二結(jié)構(gòu)示意圖;
[0023]圖4是本發(fā)明實(shí)施例中物聯(lián)網(wǎng)的通信裝置的第三結(jié)構(gòu)示意圖;
[0024]圖5是本發(fā)明實(shí)施例中物聯(lián)網(wǎng)的通信裝置的第四結(jié)構(gòu)示意圖;
[0025]圖6是本發(fā)明實(shí)施例中物聯(lián)網(wǎng)的通信裝置的第五結(jié)構(gòu)示意圖;
[0026]圖7是本發(fā)明優(yōu)選實(shí)施例中設(shè)備具體的注冊及連接接入流程圖。
【具體實(shí)施方式】
[0027]為了解決現(xiàn)有技術(shù)中,基于單線程的select和epoll模型不無法滿足系統(tǒng)的socket的讀寫要求,且設(shè)備發(fā)送的包很頻繁,將堵塞服務(wù)器業(yè)務(wù)線程的處理的問題,本發(fā)明提供了一種物聯(lián)網(wǎng)的通信方法、裝置及服務(wù)器,以下結(jié)合附圖以及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。
[0028]本發(fā)明實(shí)施例提供了一種物聯(lián)網(wǎng)的通信方法,其流程如圖1所示,包括步驟S102至 S106:
[0029]S102,設(shè)置多個第一 Selector,以從連接隊(duì)列中多線程接收連接請求。該過程中,建立了多個第一 Selector,其用于在接收連接請求的過程中并行的多線程處理連接請求,當(dāng)連接請求發(fā)來時,從連接隊(duì)列中依次獲得連接請求,由于設(shè)置了多個第一 Selector,因此,連接隊(duì)列中的連接請求可以依次進(jìn)行處理。
[0030]S104,根據(jù)多個第一 Selector接收數(shù)據(jù)的數(shù)量,確定一個第一 Selector接收當(dāng)前處于連接隊(duì)列最前端的連接請求。
[0031]在該過程中,通常是為多個第一 Selector接收數(shù)據(jù)的數(shù)量由大到小進(jìn)行排序,選擇接收數(shù)據(jù)的數(shù)量最小的Selector接收當(dāng)前待接收的連接請求,在接收連接請求后,為接收數(shù)據(jù)的數(shù)量最小的Selector更新接收數(shù)據(jù)的數(shù)量,將其對應(yīng)的計(jì)數(shù)器加一。
[0032]S106,根據(jù)連接請求建立與設(shè)備側(cè)的連接。
[0033]本發(fā)明實(shí)施例設(shè)置了多個Selector,多個Selector可以從連接隊(duì)列中多線程接收連接請求,進(jìn)而并行處理多個連接請求,服務(wù)器的處理速度更快,解決了現(xiàn)有技術(shù)中,基于單線程的select和印oil模型不無法滿足系統(tǒng)的socket的讀寫要求,且設(shè)備發(fā)送的包很頻繁,將堵塞服務(wù)器業(yè)務(wù)線程的處理的問題。
[0034]在根據(jù)連接請求建立與設(shè)備側(cè)的連接之后,可以接收來自設(shè)備側(cè)的發(fā)送消息。為了不造成擁塞,本實(shí)施例需要確定是否接收該發(fā)送消息,即根據(jù)預(yù)設(shè)條件確定是否接收來自設(shè)備側(cè)的發(fā)送消息;在確定接收發(fā)送消息的情況下,從預(yù)設(shè)的多個第二 Selector中,確定一個第二 Selector接收發(fā)送消息,再將發(fā)送消