專(zhuān)利名稱:一種通過(guò)tcp與udp雙模式通訊保障大數(shù)據(jù)流穩(wěn)定性的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種通過(guò)tcp與Udp雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法。
背景技術(shù):
隨著音視頻等大帶寬數(shù)據(jù)交換的迅猛發(fā)展,帶來(lái)了需要提高數(shù)據(jù)流穩(wěn)定性的迫切需求,通常的通訊方式要么使用Udp要么使用tcp,這在某些特定的網(wǎng)絡(luò)環(huán)境下不能保持?jǐn)?shù)據(jù)的連續(xù)性,比如一些公司內(nèi)部封閉了所有對(duì)外的Udp鏈路,使得所用采用UdP模式通信的軟件不能不更改配置以圖正常運(yùn)行,由此帶來(lái)的網(wǎng)絡(luò)維護(hù)開(kāi)銷(xiāo)增加和網(wǎng)絡(luò)安全風(fēng)險(xiǎn)上升。同時(shí)也會(huì)有一些網(wǎng)絡(luò)環(huán)境,通常會(huì)被路由器限制最大的tcp連接量,這個(gè)時(shí)候起初是使用tcp連接的軟件就會(huì)被切斷,如果這個(gè)時(shí)候軟件沒(méi)有能動(dòng)態(tài)的感知到網(wǎng)絡(luò)變化情況,那么就會(huì)造成數(shù)據(jù)流中斷,更甚至非得通過(guò)手動(dòng)配置才能重新使用。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有的上述問(wèn)題,本發(fā)明提供一種通過(guò)tcp與Udp雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法和系統(tǒng),能夠適應(yīng)各種網(wǎng)絡(luò)環(huán)境,并能智能的切換tcp或UdP通訊模式,從而自始自終的維持大數(shù)據(jù)量的傳輸。本發(fā)明的方案如下
一種通過(guò)tcp與UdP雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法,在客戶端上包括以下步
驟
(1)讀出程序配置文件里的默認(rèn)通訊方式項(xiàng)目,并以該方式連接服務(wù)器;
(2)紀(jì)錄當(dāng)前的通訊模式cl,tcp或udp;
(3)每隔一定的時(shí)間(N秒)統(tǒng)計(jì)收包率a;
(4)當(dāng)收包率a低于一定程度χ時(shí),關(guān)閉當(dāng)前和服務(wù)器的連接;
(5)重新創(chuàng)建與服務(wù)器的數(shù)據(jù)連接,切換通訊模式;
(6)正常通訊過(guò)程中,心跳周期heart_t—到,向服務(wù)器發(fā)送心跳包以保障鏈路的健
康;
在服務(wù)端上包括以下步驟
(1)能夠同時(shí)支持tcp和udp接收客戶端連接,但一個(gè)時(shí)刻只能用一種連接方式;
(2)與客戶端的連接成功之后,向客戶端發(fā)送需要的數(shù)據(jù);
(3)在一定時(shí)間(M秒)內(nèi),若沒(méi)有接收到客戶端的心跳包,則主動(dòng)中止當(dāng)前與客戶端的通訊連接。進(jìn)一步的,在上述客戶端步驟中
(1)讀出程序配置文件里的默認(rèn)通訊方式項(xiàng)目,并以該方式連接服務(wù)器; (1.1)從程序的配置文件里獲得手動(dòng)設(shè)置的通訊方式; (1. 2)根據(jù)通訊方式是UPd還是tcp來(lái)連接服務(wù)器;(2)紀(jì)錄當(dāng)前的通訊模式cl,TCP或UDP; (2. 1)與服務(wù)器連接成功;
(2. 2)已經(jīng)接收到從服務(wù)器發(fā)送過(guò)來(lái)的持續(xù)的數(shù)據(jù)流; (2. 3)保存當(dāng)前的通訊模式cl ;
(2.4)與服務(wù)器連接失敗,則切換為另一種通訊方式連接,重復(fù)(2. 1廣(2.4) (2. 5)如果失敗次數(shù)超過(guò)3次,則中止整個(gè)連接過(guò)程,把消息傳遞給上層界面;
(3)每隔一定的時(shí)間(N秒)統(tǒng)計(jì)收包率a;
(3. 1)從程序的配置文件里獲得手動(dòng)設(shè)置的理論收包數(shù)reCV_C0Unt_l ;這個(gè)收包數(shù)對(duì)應(yīng)程序從某條鏈路上在一定時(shí)間內(nèi)獲得的數(shù)據(jù)包數(shù)量; (3. 2)設(shè)置實(shí)際收包數(shù)recv_c0unt_2為0 ; (3. 3)每接收到一個(gè)數(shù)據(jù)包,recv_count_2累加1 ;
(3. 4)定時(shí)時(shí)間N秒到,則用recv_count_2除以recv_count_l,得到收包率a ;
(4)當(dāng)收包率a低于一定程度x(程序內(nèi)部設(shè)定)時(shí),關(guān)閉當(dāng)前和服務(wù)器的連接; (4. 1)如果收包率a小于X,則關(guān)閉當(dāng)前與服務(wù)器的數(shù)據(jù)連接;
(5)重新創(chuàng)建與服務(wù)器的數(shù)據(jù)連接,此次連接需要與之前的連接不同;
(5. 1)如果之前的通訊模式cl是tcp,則這次改為udp方式連接服務(wù)器; (5. 2)如果之前的通訊模式cl是udp,則這次改為tcp方式連接服務(wù)器;
(6)正常通訊過(guò)程中,心跳周期heart_t—到,向服務(wù)器發(fā)送心跳包以保障鏈路的健康。進(jìn)一步的,在上述服務(wù)端步驟中
(1)能夠同時(shí)支持tcp和udp接收客戶端連接,但一個(gè)時(shí)刻只能用一種連接方式;
(1. 1)當(dāng)客戶端通過(guò)tcp進(jìn)行連接時(shí),判斷該客戶端是否已經(jīng)有與服務(wù)器當(dāng)前正在使用的連接,有則關(guān)閉該連接,然后響應(yīng)客戶端的連接;
(2)與客戶端的連接成功之后,向客戶端發(fā)送需要的數(shù)據(jù); (2. 1)服務(wù)器接收客戶端的數(shù)據(jù)請(qǐng)求;
(2. 2)服務(wù)器向客戶端發(fā)送對(duì)應(yīng)的數(shù)據(jù);
(3)在一定時(shí)間(M秒)內(nèi),若沒(méi)有接收到客戶端的心跳包,則主動(dòng)中止當(dāng)前與客戶端的通訊連接;
(3. 1)紀(jì)錄客戶端最近一次心跳包的時(shí)間last_client_heart_t ; (3. 2)如果當(dāng)前時(shí)間與last_client_heart_t相差超過(guò)心跳超時(shí)時(shí)間heart_ timeout (單位秒),則表明此鏈路出現(xiàn)故障,則中斷與客戶端的連接; (3. 3)連接中斷后,等待客戶端的下次連接。
圖1是讀出程序配置文件里的默認(rèn)通訊方式項(xiàng)目,并以該方式連接服務(wù)器的流程圖2是紀(jì)錄當(dāng)前的通訊模式cl,TCP或UDP的流程圖; 圖3是每隔一定的時(shí)間(N秒)統(tǒng)計(jì)收包率a的流程圖; 圖4是重新創(chuàng)建與服務(wù)器的數(shù)據(jù)連接的流程圖;圖5是服務(wù)器同時(shí)支持tcp和Udp接收客戶端連接,但一個(gè)時(shí)刻只能用一種連接方式的流程圖6是服務(wù)器主動(dòng)中斷與客戶端連接的流程圖。
具體實(shí)施例方式實(shí)施例1
一種通過(guò)tcp與UdP雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法,在客戶端上包括以下步
驟
(1)讀出程序配置文件里的默認(rèn)通訊方式項(xiàng)目,并以該方式連接服務(wù)器; (1. 1)從程序的配置文件里獲得手動(dòng)設(shè)置的通訊方式;
(1. 2)根據(jù)通訊方式是upd還是tcp來(lái)連接服務(wù)器;
(2)紀(jì)錄當(dāng)前的通訊模式cl,TCP或UDP; (2. 1)與服務(wù)器連接成功;
(2. 2)已經(jīng)接收到從服務(wù)器發(fā)送過(guò)來(lái)的持續(xù)的數(shù)據(jù)流; (2. 3)保存當(dāng)前的通訊模式cl ;
(2.4)與服務(wù)器連接失敗,則切換為另一種通訊方式連接,重復(fù)(2. 1廣(2.4) (2. 5)如果失敗次數(shù)超過(guò)3次,則中止整個(gè)連接過(guò)程,把消息傳遞給上層界面;
(3)每隔一定的時(shí)間(N秒)統(tǒng)計(jì)收包率a;
(3. 1)從程序的配置文件里獲得手動(dòng)設(shè)置的理論收包數(shù)reCV_C0Unt_l ;這個(gè)收包數(shù)對(duì)應(yīng)程序從某條鏈路上在一定時(shí)間內(nèi)獲得的數(shù)據(jù)包數(shù)量; (3. 2)設(shè)置實(shí)際收包數(shù)recv_c0unt_2為0 ; (3. 3)每接收到一個(gè)數(shù)據(jù)包,recv_count_2累加1 ;
(3. 4)定時(shí)時(shí)間N秒到,則用recv_count_2除以recv_count_l,得到收包率a ;
(4)當(dāng)收包率a低于一定程度x(程序內(nèi)部設(shè)定)時(shí),關(guān)閉當(dāng)前和服務(wù)器的連接; (4. 1)如果收包率a小于X,則關(guān)閉當(dāng)前與服務(wù)器的數(shù)據(jù)連接;
(5)重新創(chuàng)建與服務(wù)器的數(shù)據(jù)連接,此次連接需要與之前的連接不同;
(5. 1)如果之前的通訊模式cl是tcp,則這次改為udp方式連接服務(wù)器; (5. 2)如果之前的通訊模式cl是udp,則這次改為tcp方式連接服務(wù)器;
(6)正常通訊過(guò)程中,心跳周期heart_t—到,向服務(wù)器發(fā)送心跳包以保障鏈路的健康。在服務(wù)端上包括以下步驟
(1)能夠同時(shí)支持tcp和udp接收客戶端連接,但一個(gè)時(shí)刻只能用一種連接方式; (1. 1)當(dāng)客戶端通過(guò)tcp進(jìn)行連接時(shí),判斷該客戶端是否已經(jīng)有與服務(wù)器當(dāng)前正在使用的連接,有則關(guān)閉該連接,然后響應(yīng)客戶端的連接;
(2)與客戶端的連接成功之后,向客戶端發(fā)送需要的數(shù)據(jù); (2. 1)服務(wù)器接收客戶端的數(shù)據(jù)請(qǐng)求;
(2. 2)服務(wù)器向客戶端發(fā)送對(duì)應(yīng)的數(shù)據(jù);
(3)在一定時(shí)間(M秒)內(nèi),若沒(méi)有接收到客戶端的心跳包,則主動(dòng)中止當(dāng)前與客戶端的通訊連接;(3. 1)紀(jì)錄客戶端最近一次心跳包的時(shí)間last_client_heart_t ; (3. 2)如果當(dāng)前時(shí)間與last_client_heart_t相差超過(guò)心跳超時(shí)時(shí)間heart_ timeout (單位秒),則表明此鏈路出現(xiàn)故障,則中斷與客戶端的連接;
(3. 3)連接中斷后,等待客戶端的下次連接。
具體在一個(gè)udp丟包嚴(yán)重的網(wǎng)絡(luò)環(huán)境下,采用udp通信的客戶端收包率只有7. 6%, 而采用以上通過(guò)tcp與udp雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法,設(shè)置通訊方式為udp,設(shè)置每隔8分鐘統(tǒng)計(jì)一次收包率,設(shè)置理論收包數(shù)為6(^24*2*8,設(shè)置心跳周期為10秒,客戶端在運(yùn)行8分鐘后切換為tcp,此時(shí)收包率在97%以上,證明了本方法可以有效的動(dòng)態(tài)適應(yīng)網(wǎng)絡(luò)狀況的變化,避開(kāi)一些特殊的網(wǎng)絡(luò)設(shè)置。
權(quán)利要求
1.一種通過(guò)tcp與udp雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法,其特征在于,在客戶端上包括以下步驟(1)讀出程序配置文件里的默認(rèn)通訊方式項(xiàng)目,并以該方式連接服務(wù)器;(2)紀(jì)錄當(dāng)前的通訊模式cl,tcp或udp;(3)每隔一定的時(shí)間(N秒)統(tǒng)計(jì)收包率a;(4)當(dāng)收包率a低于一定程度χ時(shí),關(guān)閉當(dāng)前和服務(wù)器的連接;(5)重新創(chuàng)建與服務(wù)器的數(shù)據(jù)連接,切換通訊模式;(6)正常通訊過(guò)程中,心跳周期heart_t—到,向服務(wù)器發(fā)送心跳包以保障鏈路的健康;在服務(wù)端上包括以下步驟(1)能夠同時(shí)支持tcp和udp接收客戶端連接,但一個(gè)時(shí)刻只能用一種連接方式;(2)與客戶端的連接成功之后,向客戶端發(fā)送需要的數(shù)據(jù);(3)在一定時(shí)間(M秒)內(nèi),若沒(méi)有接收到客戶端的心跳包,則主動(dòng)中止當(dāng)前與客戶端的通訊連接。
2.根據(jù)權(quán)利要求1所述的一種通過(guò)tcp與udp雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法, 其特征在于,在上述客戶端步驟中(1)讀出程序配置文件里的默認(rèn)通訊方式項(xiàng)目,并以該方式連接服務(wù)器; (1. 1)從程序的配置文件里獲得手動(dòng)設(shè)置的通訊方式;(1. 2)根據(jù)通訊方式是upd還是tcp來(lái)連接服務(wù)器;(2)紀(jì)錄當(dāng)前的通訊模式cl,TCP或UDP; (2. 1)與服務(wù)器連接成功;(2. 2)已經(jīng)接收到從服務(wù)器發(fā)送過(guò)來(lái)的持續(xù)的數(shù)據(jù)流; (2. 3)保存當(dāng)前的通訊模式cl ;(2.4)與服務(wù)器連接失敗,則切換為另一種通訊方式連接,重復(fù)(2. 1廣(2.4) (2. 5)如果失敗次數(shù)超過(guò)3次,則中止整個(gè)連接過(guò)程,把消息傳遞給上層界面;(3)每隔一定的時(shí)間(N秒)統(tǒng)計(jì)收包率a;(3. 1)從程序的配置文件里獲得手動(dòng)設(shè)置的理論收包數(shù)reCV_C0Unt_l ;這個(gè)收包數(shù)對(duì)應(yīng)程序從某條鏈路上在一定時(shí)間內(nèi)獲得的數(shù)據(jù)包數(shù)量; (3. 2)設(shè)置實(shí)際收包數(shù)recv_c0unt_2為0 ; (3. 3)每接收到一個(gè)數(shù)據(jù)包,recv_count_2累加1 ;(3. 4)定時(shí)時(shí)間N秒到,則用recv_count_2除以recv_count_l,得到收包率a ;(4)當(dāng)收包率a低于一定程度x(程序內(nèi)部設(shè)定)時(shí),關(guān)閉當(dāng)前和服務(wù)器的連接; (4. 1)如果收包率a小于X,則關(guān)閉當(dāng)前與服務(wù)器的數(shù)據(jù)連接;(5)重新創(chuàng)建與服務(wù)器的數(shù)據(jù)連接,此次連接需要與之前的連接不同;(5. 1)如果之前的通訊模式cl是tcp,則這次改為udp方式連接服務(wù)器; (5. 2)如果之前的通訊模式cl是udp,則這次改為tcp方式連接服務(wù)器;(6)正常通訊過(guò)程中,心跳周期heart_t—到,向服務(wù)器發(fā)送心跳包以保障鏈路的健康。
3.根據(jù)權(quán)利要求1所述的一種通過(guò)tcp與udp雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法,其特征在于,在上述服務(wù)端步驟中(1)能夠同時(shí)支持tcp和udp接收客戶端連接,但一個(gè)時(shí)刻只能用一種連接方式;(1. 1)當(dāng)客戶端通過(guò)tcp進(jìn)行連接時(shí),判斷該客戶端是否已經(jīng)有與服務(wù)器當(dāng)前正在使用的連接,有則關(guān)閉該連接,然后響應(yīng)客戶端的連接;(2)與客戶端的連接成功之后,向客戶端發(fā)送需要的數(shù)據(jù); (2. 1)服務(wù)器接收客戶端的數(shù)據(jù)請(qǐng)求;(2. 2)服務(wù)器向客戶端發(fā)送對(duì)應(yīng)的數(shù)據(jù);(3)在一定時(shí)間(M秒)內(nèi),若沒(méi)有接收到客戶端的心跳包,則主動(dòng)中止當(dāng)前與客戶端的通訊連接;(3. 1)紀(jì)錄客戶端最近一次心跳包的時(shí)間last_client_heart_t ; (3. 2)如果當(dāng)前時(shí)間與last_client_heart_t相差超過(guò)心跳超時(shí)時(shí)間heart_ timeout (單位秒),則表明此鏈路出現(xiàn)故障,則中斷與客戶端的連接; (3. 3)連接中斷后,等待客戶端的下次連接。
全文摘要
本發(fā)明涉及一種通過(guò)tcp與udp雙模式切換保障大數(shù)據(jù)流穩(wěn)定的方法。在客戶端上包括以下步驟(1)讀出程序配置文件里的默認(rèn)通訊方式項(xiàng)目,并以該方式連接服務(wù)器;(2)紀(jì)錄當(dāng)前的通訊模式c1,tcp或udp;(3)每隔一定的時(shí)間(N秒)統(tǒng)計(jì)收包率a;(4)當(dāng)收包率a低于一定程度x時(shí),關(guān)閉當(dāng)前和服務(wù)器的連接;(5)重新創(chuàng)建與服務(wù)器的數(shù)據(jù)連接,切換通訊模式;(6)正常通訊過(guò)程中,心跳周期heart_t一到,向服務(wù)器發(fā)送心跳包以保障鏈路的健康。
文檔編號(hào)H04L12/26GK102255898SQ201110186120
公開(kāi)日2011年11月23日 申請(qǐng)日期2011年7月5日 優(yōu)先權(quán)日2011年7月5日
發(fā)明者嚴(yán)飛 申請(qǐng)人:上海悠絡(luò)客電子科技有限公司