一種基于Socket連接的多通道雙工通訊方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于通訊技術(shù)領(lǐng)域,具體涉及一種基于Socket連接的多通道雙工通訊方法。
【背景技術(shù)】
[0002]現(xiàn)階段,服務(wù)器端和客戶端之間的Socket連接建立過程為:
[0003](I)服務(wù)器端偵聽某一端口,等待客戶端的Socket連接請(qǐng)求;
[0004](2)客戶端向服務(wù)器端發(fā)送Socket連接請(qǐng)求,其中,該Socket連接請(qǐng)求攜帶有客戶端的地址和端口號(hào);
[0005](3)當(dāng)服務(wù)器端監(jiān)聽到客戶端所發(fā)送的連接請(qǐng)求時(shí),服務(wù)器端創(chuàng)建一個(gè)新的線程,通過線程管理服務(wù)器端和客戶端正式建立的Socket連接,服務(wù)器端在建立Socket連接后,客戶端與服務(wù)器端即可進(jìn)行基于TCP/IP的通訊。
[0006]然而,在Socket通訊類軟件研發(fā)的過程中,需要頻繁的針對(duì)Socket連接進(jìn)行創(chuàng)建、使用、銷毀等操作;而每建立一個(gè)Socket連接,服務(wù)器端均需要啟動(dòng)一個(gè)線程,對(duì)該Socket連接進(jìn)行管理,由此導(dǎo)致Socket連接的管理效率低下,占用了服務(wù)器端大量的CPU和內(nèi)存等資源。
【發(fā)明內(nèi)容】
[0007]針對(duì)現(xiàn)有技術(shù)存在的缺陷,本發(fā)明提供一種基于Socket連接的多通道雙工通訊方法,可有效解決上述問題。
[0008]本發(fā)明采用的技術(shù)方案如下:
[0009]本發(fā)明提供一種基于Socket連接的多通道雙工通訊方法,包括以下步驟:
[0010]步驟1:分別創(chuàng)建適配器、服務(wù)器端Socket容器和客戶端Socket容器;所述適配器分別與所述服務(wù)器端Socket容器和所述客戶端Socket容器連接;
[0011]其中,所述適配器用于記錄需建立Socket連接的服務(wù)器端地址和客戶端地址的匹配關(guān)系;
[0012]所述服務(wù)器端Socket容器用于存儲(chǔ)已被所述適配器記錄匹配關(guān)系的服務(wù)器端套接字,其中,所述服務(wù)器端套接字包含所述服務(wù)器端地址;
[0013]所述客戶端Socket容器用于存儲(chǔ)已被所述適配器記錄匹配關(guān)系的客戶端套接字,其中,所述客戶端套接字包含所述客戶端地址;
[0014]步驟2,每當(dāng)所述適配器已記錄服務(wù)器端地址和客戶端地址的匹配關(guān)系之后,在已建立匹配關(guān)系的服務(wù)器端創(chuàng)建服務(wù)器端發(fā)送隊(duì)列和服務(wù)器接收隊(duì)列;
[0015]在已建立匹配關(guān)系的客戶端創(chuàng)建客戶端發(fā)送隊(duì)列和客戶端接收隊(duì)列;
[0016]步驟3,所述適配器對(duì)所述服務(wù)器端發(fā)送隊(duì)列和所述客戶端發(fā)送隊(duì)列進(jìn)行監(jiān)聽,每當(dāng)監(jiān)聽到所述客戶端發(fā)送隊(duì)列中存在所述客戶端添加的待發(fā)送客戶端消息時(shí),執(zhí)行步驟4 ;每當(dāng)監(jiān)聽到所述服務(wù)器端發(fā)送隊(duì)列中存在所述服務(wù)器端添加的待發(fā)送服務(wù)器端消息時(shí),執(zhí)行步驟5 ;
[0017]步驟4,所述適配器對(duì)所述待發(fā)送客戶端消息進(jìn)行解析,提取到該待發(fā)送客戶端消息所攜帶的客戶端地址和服務(wù)器端地址;
[0018]然后,所述適配器判斷提取到的客戶端地址和服務(wù)器端地址是否已建立匹配關(guān)系,如果沒有,則結(jié)束流程;如果有,則所述適配器對(duì)所述服務(wù)器端Socket容器進(jìn)行查找,得到與本次匹配關(guān)系對(duì)應(yīng)的服務(wù)器端套接字;所述服務(wù)器端套接字將待發(fā)送客戶端消息發(fā)送到對(duì)應(yīng)的服務(wù)器端接收隊(duì)列,使對(duì)應(yīng)的服務(wù)器端通過讀取自身的服務(wù)器端接收隊(duì)列,接收到來自客戶端的消息;
[0019]步驟5,所述適配器對(duì)所述待發(fā)送服務(wù)器端消息進(jìn)行解析,提取到該待發(fā)送服務(wù)器端消息所攜帶的客戶端地址和服務(wù)器端地址;
[0020]然后,所述適配器判斷提取到的客戶端地址和服務(wù)器端地址是否已建立匹配關(guān)系,如果沒有,則結(jié)束流程;如果有,則所述適配器對(duì)所述客戶端Socket容器進(jìn)行查找,得到與本次匹配關(guān)系對(duì)應(yīng)的客戶端套接字;所述客戶端套接字將待發(fā)送服務(wù)器端消息發(fā)送到對(duì)應(yīng)的客戶端接收隊(duì)列,使對(duì)應(yīng)的客戶端通過讀取自身的客戶端接收隊(duì)列,接收到來自服務(wù)器端的消息。
[0021]優(yōu)選的,步驟I中,所述適配器用于記錄需建立Socket連接的服務(wù)器端地址和客戶端地址的匹配關(guān)系,具體指:
[0022]在每臺(tái)服務(wù)器端部署唯一對(duì)應(yīng)的鏈接監(jiān)聽器,通過所述鏈接監(jiān)聽器對(duì)服務(wù)器端的地址進(jìn)行監(jiān)聽,當(dāng)監(jiān)聽到服務(wù)器端接收到來自客戶端的Socket連接建立請(qǐng)求時(shí),所述鏈接監(jiān)聽器對(duì)該Socket連接建立請(qǐng)求進(jìn)行解析,獲得客戶端地址以及服務(wù)器端地址;
[0023]然后,所述鏈接監(jiān)聽器將所獲得的客戶端地址以及服務(wù)器端地址發(fā)送給所述適配器;
[0024]所述適配器記錄需建立Socket連接的服務(wù)器端地址和客戶端地址的匹配關(guān)系。
[0025]優(yōu)選的,所述客戶端地址指客戶端IP地址和/或端口號(hào);所述服務(wù)器端地址指服務(wù)器端IP地址和/或端口號(hào)。
[0026]優(yōu)選的,還包括:
[0027]創(chuàng)建Socket清理器;所述Socket清理器輪詢所述服務(wù)器端Socket容器和所述客戶端Socket容器,將所述服務(wù)器端Socket容器和所述客戶端Socket容器中生命周期已超期的Socket連接所對(duì)應(yīng)的套接字刪除。
[0028]本發(fā)明的有益效果如下:
[0029]本發(fā)明提供的基于Socket連接的多通道雙工通訊方法具有以下優(yōu)點(diǎn):
[0030]通過簡單的方式即可實(shí)現(xiàn)服務(wù)器端和客戶端的多通道雙工通訊,具有Socket連接的管理效率高、資源占用量少的優(yōu)點(diǎn)。
【附圖說明】
[0031]圖1為本發(fā)明提供的基于Socket連接的多通道雙工通訊方法的流程示意圖。
【具體實(shí)施方式】
[0032]以下結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說明:
[0033]結(jié)合圖1,本發(fā)明提供一種基于Socket連接的多通道雙工通訊方法,包括以下步驟:
[0034]步驟1:分別創(chuàng)建適配器、服務(wù)器端Socket容器和客戶端Socket容器;適配器分別與服務(wù)器端Socket容器和客戶端Socket容器連接。
[0035](I)適配器
[0036]適配器用于記錄需建立Socket連接的服務(wù)器端地址和客戶端地址的匹配關(guān)系。
[0037]在具體實(shí)現(xiàn)上,適配器可采用以下方式記錄需建立Socket連接的服務(wù)器端地址和客戶端地址的匹配關(guān)系:
[0038]在每臺(tái)服務(wù)器端部署唯一對(duì)應(yīng)的鏈接監(jiān)聽器,通過鏈接監(jiān)聽器對(duì)服務(wù)器端的地址進(jìn)行監(jiān)聽,當(dāng)監(jiān)聽到服務(wù)器端接收到來自客戶端的Socket連接建立請(qǐng)求時(shí),鏈接監(jiān)聽器對(duì)該Socket連接建立請(qǐng)求進(jìn)行解析,獲得客戶端地址以及服務(wù)器端地址;
[0039]然后,鏈接監(jiān)聽器將所獲得的客戶端地址以及服務(wù)器端地址發(fā)送給適配器;
[0040]適配器記錄需建立Socket連接的服務(wù)器端地址和客戶端地址的匹配關(guān)系。
[0041](2)服務(wù)器端Socket容器和客戶端Socket容器
[0042]服務(wù)器端Socket容器用于存儲(chǔ)已被適配器記錄匹配關(guān)系的服務(wù)器端套接字,其中,服務(wù)器端套接字包含服務(wù)器端地址;
[0043]客戶端Socket容器用于存儲(chǔ)已被適配器記錄匹配關(guān)系的客戶端套接字,其中,客戶端套接字包含客戶端地址;
[0044]本發(fā)明中,客戶端地址指客戶端IP地址和/或端口號(hào);服務(wù)器端地址指服務(wù)器端IP地址和/或端口號(hào)。
[0045]步驟2,每當(dāng)適配器已記錄服務(wù)器端地址和客戶端地址的匹配關(guān)系之后,在已建立匹配關(guān)系的服務(wù)器端創(chuàng)建服務(wù)器端發(fā)送隊(duì)列和服務(wù)器接收隊(duì)列;
[0046]在已建立匹配關(guān)系的客戶端創(chuàng)建客戶端發(fā)送隊(duì)列和客戶端接收隊(duì)列;
[0047]步驟3,適配器對(duì)服務(wù)器端發(fā)送隊(duì)列和客戶端發(fā)送隊(duì)列進(jìn)行監(jiān)聽,每當(dāng)監(jiān)聽到