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

一種Linux服務(wù)器的連接方法和裝置制造方法

文檔序號:7782775閱讀:280來源:國知局
一種Linux服務(wù)器的連接方法和裝置制造方法
【專利摘要】一種Linux服務(wù)器的連接方法和裝置,所述Linux服務(wù)器的連接方法包括:主進程檢測到客戶端的連接請求,與所述客戶端建立連接;當(dāng)與所述客戶端連接成功時,所述主進程創(chuàng)建與所述客戶端對應(yīng)的套接字,并將所述套接字分配給子進程;所述子進程利用所述套接字與所述客戶端進行網(wǎng)絡(luò)通信,處理所述客戶端的業(yè)務(wù)請求。采用所述方法和裝置,可以有效地提高Linux服務(wù)器連接成功的概率。
【專利說明】一種Linux服務(wù)器的連接方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信【技術(shù)領(lǐng)域】,特別涉及一種Linux服務(wù)器的連接方法和裝置。【背景技術(shù)】
[0002]從3.9版本開始,Linux內(nèi)核提供了一個新的傳輸控制協(xié)議(TransmissionControl Protocol, TCP)和用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol, UDP)的套接字(Socket)選項:S0_REUSEP0RT,S0_REUSEP0RT選項允許多個Socket同時綁定于同一個服務(wù)端口,多個Socket可以分別屬于不同的進程,其目的是提高多核Linux服務(wù)器的并發(fā)處理能力。
[0003]S0_REUSEP0RT選項既可以用于TCP連接,也可以用于UDP連接。當(dāng)用于TCP連接時,多個Socket同時綁定于同一個服務(wù)端口,多個主進程監(jiān)聽各自對應(yīng)的Socket。當(dāng)有客戶端與Linux服務(wù)器建立連接時,其中一個主進程調(diào)用Accept函數(shù)接收并處理新建的連接,其他主進程等待。
[0004]采用上述技術(shù)方案,能提高Linux服務(wù)器的性能,但是容易造成客戶端與Linux服務(wù)器連接失敗,從而降低與Linux服務(wù)器連接成功的概率。

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

[0005]本發(fā)明實施例解決的是如何將建立連接與業(yè)務(wù)處理分開,確保主進程的數(shù)量,即監(jiān)聽Socket的數(shù)量不變,從而提高Linux服務(wù)器連接成功的概率的問題。
[0006]為解決上述問題,本發(fā)明實施例提供一種Linux服務(wù)器的連接方法,包括:主進程檢測到客戶端的連接請求,與所述客戶端建立連接;當(dāng)與所述客戶端連接成功時,所述主進程創(chuàng)建與所述客戶端對應(yīng)的套接字,并將所述套接字分配給子進程;所述子進程利用所述套接字與所述客戶端進行網(wǎng)絡(luò)通信,處理所述客戶端的業(yè)務(wù)請求。
[0007]可選的,所述子進程由所述主進程預(yù)先啟動,所述子進程的數(shù)目預(yù)先設(shè)定。
[0008]可選的,所述當(dāng)與所述客戶端連接成功時,還包括:獲取并保存所述連接成功的客戶端的端口和地址,獲取并保存所述子進程的標(biāo)識。
[0009]可選的,所述當(dāng)與所述客戶端連接成功時,還包括:判斷所述客戶端的端口和地址是否已經(jīng)保存,當(dāng)所述請求連接的客戶端的端口和地址已經(jīng)保存時,將所述套接字分配給上一次與所述客戶端連接的子進程。
[0010]可選的,所述獲取所述子進程的標(biāo)識,包括:將所述連接成功的客戶端的端口和地址號轉(zhuǎn)換成字符串,對所述字符串進行信息一摘要算法MD5運算,得到所述字符串的MD5值,以所述子進程的數(shù)目為分母對所述字符串的MD5值求余,利用所述求余結(jié)果選擇相應(yīng)的子進程。
[0011]可選的,所述將所述套接字傳遞給子進程,包括:將所述套接字通過管道傳遞給子進程。
[0012]為解決上述問題,本發(fā)明實施例還提供一種Linux服務(wù)器的連接裝置,包括:連接建立單元,用于當(dāng)主進程檢測到客戶端的連接請求時,與所述客戶端建立連接;創(chuàng)建單元,用于當(dāng)與所述客戶端連接成功時,所述主進程創(chuàng)建與所述客戶端對應(yīng)的套接字;分配單元,用于將所述創(chuàng)建單元創(chuàng)建的套接字分配給子進程;管道建立單元,用于所述子進程與所述主進程進行網(wǎng)絡(luò)通信;處理單元,用于處理所述客戶端的業(yè)務(wù)請求。
[0013]可選的,所述子進程由所述主進程預(yù)先啟動,所述子進程的數(shù)目預(yù)先設(shè)定。
[0014]可選的,所述創(chuàng)建單元,還用于當(dāng)與所述客戶端連接成功時,獲取并保存所述連接成功的客戶端的端口和地址。
[0015]可選的,所述Linux服務(wù)器的連接裝置,還包括:存儲單元,用于保存所述連接成功的客戶端的端口和地址與所述分配單元分配的子進程的對應(yīng)關(guān)系。
[0016]可選的,所述Linux服務(wù)器的連接裝置,還包括:判斷單元,用于判斷所述請求連接的客戶端的端口和地址是否已經(jīng)保存,并當(dāng)所述請求連接的客戶端的端口和地址已經(jīng)保存時,將所述套接字分配給上一次與所述客戶端連接的子進程。
[0017]可選的,所述分配單元,還用于將所述連接成功的客戶端的端口和地址號轉(zhuǎn)換成字符串,對所述字符串進行信息一摘要算法MD5運算,得到所述字符串的MD5值,以所述子進程的數(shù)目為分母對所述字符串的MD5值求余,利用所述求余結(jié)果選擇相應(yīng)的子進程。
[0018]與現(xiàn)有技術(shù)相比,本發(fā)明實施例的技術(shù)方案具有以下優(yōu)點:
[0019]通過在主進程與客戶端連接成功時創(chuàng)建與所述客戶端對應(yīng)的套接字分配給子進程,子進程利用所述套接字與所述客戶端進行網(wǎng)絡(luò)通信,處理客戶端的業(yè)務(wù)請求。主進程只負(fù)責(zé)與客戶端進行連接和創(chuàng)建套接字,而不負(fù)責(zé)處理客戶端的業(yè)務(wù)請求,當(dāng)有子進程意外退出時,并不會影響到主進程的運行,因此能夠有效地提高Linux服務(wù)器連接成功的概率。
[0020]進一步,根據(jù)客戶端的業(yè)務(wù)規(guī)模,主進程預(yù)先啟動相應(yīng)數(shù)目的子進程,在接收到客戶端連接請求時,分配相應(yīng)的子進程進行處理,可以有效避免主進程在接收到客戶端的連接請求時,再實時生成子進程,從而提高Linux服務(wù)器的實時處理性能。
[0021]此外,對已成功與Linux服務(wù)器連接的客戶端的端口和地址進行保存,并分配對應(yīng)的子進程,當(dāng)客戶端再次請求與Linux服務(wù)器連接時,主進程將套接字分配給上一次與所述客戶端連接的子進程,可以確保來自不同客戶端的連接被平均分配給各個子進程,便于靈活設(shè)計需要保持連接狀態(tài)的業(yè)務(wù)。
【專利附圖】

【附圖說明】
[0022]圖1是本發(fā)明實施例中的一種Linux服務(wù)器的連接方法的流程圖;
[0023]圖2是本發(fā)明實施例中的另一種Linux服務(wù)器的連接方法的流程圖;
[0024]圖3是本發(fā)明實施例中的一種Linux服務(wù)器的連接方法的流程圖;
[0025]圖4是本發(fā)明實施例中的另一種Linux服務(wù)器的連接方法的流程圖;
[0026]圖5是本發(fā)明實施例中的一種Linux服務(wù)器的連接裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0027]當(dāng)有新的客戶端請求與Linux服務(wù)器連接時,根據(jù)客戶端的源地址、端口和目的地址、端口計算出的哈希(HASH)值,把IP數(shù)據(jù)包路由到某個處于監(jiān)聽狀態(tài)的Socket上進行處理。然而在TCP協(xié)議中,當(dāng)客戶端與Linux服務(wù)器連接成功之前,如果出現(xiàn)某個進程意外退出的情況,會導(dǎo)致處于監(jiān)聽狀態(tài)的Socket數(shù)量減少,之后接收的IP數(shù)據(jù)包可能會被路由到錯誤的Socket,造成客戶端與Linux服務(wù)器連接失敗,降低與Linux服務(wù)器連接成功的概率。
[0028]本發(fā)明實施例中,通過主進程與客戶端連接成功時創(chuàng)建與所述客戶端對應(yīng)的套接字分配給子進程,子進程利用所述套接字與所述客戶端進行網(wǎng)絡(luò)通信,處理客戶端的業(yè)務(wù)請求。主進程只負(fù)責(zé)與客戶端進行連接和創(chuàng)建套接字,而不負(fù)責(zé)處理客戶端的業(yè)務(wù)請求,當(dāng)有子進程意外退出時,并不會影響到主進程的運行,因此能夠有效地提高Linux服務(wù)器連接成功的概率。
[0029]為使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施例做詳細(xì)的說明。
[0030]本發(fā)明實施例提供一種Linux服務(wù)器的連接方法,參照圖1,以下通過具體步驟進行詳細(xì)說明。
[0031]步驟S101,主進程檢測到客戶端的連接請求,與所述客戶端建立連接。
[0032]在具體實施中,當(dāng)主進程檢測到客戶端的連接請求后,與所述客戶端可以經(jīng)過三次握手協(xié)議進行連接。
[0033]步驟S102,當(dāng)與所述客戶端連接成功時,所述主進程創(chuàng)建與所述客戶端對應(yīng)的套接字,并將所述套接字分配給子進程。
[0034]在具體實施中,當(dāng)主進程與所述客戶端經(jīng)過三次握手協(xié)議連接成功后,所述主進程創(chuàng)建一個對應(yīng)連接客戶端的套接字Socket,并將Socket分配給子進程。
[0035]在具體實施中,主進程可以通過管道將Socket分配給子進程。
[0036]步驟S103,所述子進程利用所述套接字與所述客戶端進行網(wǎng)絡(luò)通信,處理所述客戶端的業(yè)務(wù)請求。
[0037]在具體實施中,子進程根據(jù)步驟S102中主進程分配的Socket,與客戶端進行網(wǎng)絡(luò)通信,處理已成功與主進程建立連接的客戶端的業(yè)務(wù)請求。
[0038]采用本發(fā)明實施例中的方法,當(dāng)主進程與客戶端連接成功時創(chuàng)建與所述客戶端對應(yīng)的套接字分配給子進程,子進程利用所述套接字與所述客戶端進行網(wǎng)絡(luò)通信,處理客戶端的業(yè)務(wù)請求。主進程只負(fù)責(zé)與客戶端進行連接和創(chuàng)建套接字,而不負(fù)責(zé)處理客戶端的業(yè)務(wù)請求,當(dāng)有子進程意外退出時,并不會影響到主進程的運行,因此能夠有效地提高Linux服務(wù)器連接成功的概率。
[0039]本發(fā)明實施例還提供了另一種Linux服務(wù)器的連接方法,參照圖2,以下通過具體步驟進行詳細(xì)說明。
[0040]步驟S201,主進程預(yù)先啟動子進程。
[0041]在本發(fā)明實施例中,可以采用預(yù)派生(Pre-Fork)方法,根據(jù)需要處理的業(yè)務(wù)的規(guī)模,由主進程預(yù)先啟動相應(yīng)數(shù)目的子進程。
[0042]步驟S202,主進程檢測到客戶端連接請求,與客戶端建立連接。
[0043]在本發(fā)明實施例中,在Linux服務(wù)器的內(nèi)核中可以存在多個主進程,對應(yīng)每個主進程都可以存在一個對應(yīng)的Socket,每個主進程可以通過監(jiān)聽與其對應(yīng)的Socket接收客戶端的連接請求。當(dāng)主進程Socket接收到客戶端連接請求時,主進程與客戶端可以經(jīng)過三次握手協(xié)議建立連接。
[0044]步驟S203,主進程創(chuàng)建與客戶端對應(yīng)的Socket。[0045]在本發(fā)明實施例中,當(dāng)主進程與客戶端經(jīng)過三次握手協(xié)議建立連接后,主進程可以創(chuàng)建對應(yīng)客戶端連接的Socket。
[0046]步驟S204,主進程將Socket分配給子進程。
[0047]在本發(fā)明實施例中,主進程可以通過管道將步驟S203中創(chuàng)建的Socket通過管道分配給對應(yīng)的子進程。
[0048]步驟S205,子進程利用Socket與客戶端進行網(wǎng)絡(luò)通信,處理客戶端業(yè)務(wù)請求。
[0049]采用本發(fā)明實施例的方案,根據(jù)客戶端的業(yè)務(wù)規(guī)模,主進程預(yù)先啟動相應(yīng)數(shù)目的子進程,在接收到客戶端連接請求時,分配相應(yīng)的子進程進行處理,可以有效避免主進程在接收到客戶端的連接請求時,再實時生成子進程,從而提高Linux服務(wù)器的實時處理性能。
[0050]本發(fā)明實施例還提供了另一種Linux服務(wù)器的連接方法,參照圖3,以下通過具體步驟進行詳細(xì)說明。
[0051]步驟S301,主進程預(yù)先啟動子進程。
[0052]步驟S302,主進程檢測到客戶端連接請求,與客戶端建立連接。
[0053]步驟S303,當(dāng)主進程與客戶端連接成功時,獲取并保存所述連接成功的客戶端的端口和地址。
[0054]在本發(fā)明實施例中,當(dāng)連接成功時,獲取并保存已成功連接的客戶端的端口和地址,可以將端口和地址保存在Linux服務(wù)器中的某一指定區(qū)域。
[0055]步驟S304,主進程創(chuàng)建與客戶端對應(yīng)的Socket。
[0056]步驟S305,主進程將Socket分配給子進程。
[0057]在本發(fā)明實施例中,根據(jù)步驟S303獲取到的客戶端的端口和地址,可以將所述端口號和地址號轉(zhuǎn)換成字符串,對所述字符串進行信息一摘要MD5運算,得到字符串的MD5值;以主進程預(yù)先啟動的子進程的數(shù)目作為分母,對字符串的MD值進行求余運算,利用求余結(jié)果選擇相應(yīng)的子進程。
[0058]步驟S306,子進程利用Socket與客戶端進行網(wǎng)絡(luò)通信,處理客戶端業(yè)務(wù)請求。
[0059]本發(fā)明實施例還可以對上述實施例作進一步擴展,參照圖4,以下通過具體步驟進行詳細(xì)說明。
[0060]步驟S401,主進程預(yù)先啟動子進程。
[0061]步驟S402,主進程檢測到客戶端連接請求,與客戶端建立連接。
[0062]步驟S403,判斷已連接的客戶端的端口和地址是否已經(jīng)保存,并當(dāng)客戶端的端口和地址已經(jīng)保存時,執(zhí)行步驟S404 ;當(dāng)客戶端的端口和地址未保存時,執(zhí)行步驟S405。
[0063]在本發(fā)明實施例中,可以根據(jù)Linux服務(wù)器中已保存的客戶端的端口和地址,判斷當(dāng)前連接成功的客戶端的端口和地址是否已經(jīng)保存在Linux服務(wù)器中。
[0064]步驟S404,主進程創(chuàng)建與客戶端對應(yīng)的Socket,并將Socket分配給上一次與所述客戶端連接的子進程。
[0065]在本發(fā)明實施例中,當(dāng)連接成功的客戶端的端口和地址已經(jīng)保存在服務(wù)器中時,主進程可以將創(chuàng)建的Socket分配給所述客戶端上一次連接時所分配的子進程,并執(zhí)行步驟 S407。
[0066]步驟S405,獲取并保存連接成功的客戶端的端口和地址。
[0067]步驟S406,主進程創(chuàng)建與客戶端對應(yīng)的Socket,并將Socket分配給子進程。[0068]在本發(fā)明實施例中,根據(jù)步驟S405獲取到的客戶端的端口和地址,可以將所述端口號和地址號轉(zhuǎn)換成字符串,對所述字符串進行信息一摘要MD5運算,得到字符串的MD5值;以主進程預(yù)先啟動的子進程的數(shù)目作為分母,對字符串的MD值進行求余運算,利用求余結(jié)果選擇相應(yīng)的子進程,并執(zhí)行步驟S407。
[0069]步驟S407,子進程利用Socket與客戶端進行網(wǎng)絡(luò)通信,處理客戶端業(yè)務(wù)請求。
[0070]采用本發(fā)明實施例中的方案,對已成功與Linux服務(wù)器連接的客戶端的端口和地址進行保存,并分配對應(yīng)的子進程,當(dāng)客戶端再次請求與Linux服務(wù)器連接時,主進程將套接字分配給上一次與所述客戶端連接的子進程,可以確保來自不同客戶端的連接被平均分配給各個子進程,便于靈活設(shè)計需要保持連接狀態(tài)的業(yè)務(wù)。
[0071]本發(fā)明實施例提供了一種Linux服務(wù)器的連接裝置50,包括:連接建立單元501、創(chuàng)建單元502、分配單元503、管道建立單元504和處理單元505,其中:
[0072]連接建立單元501,用于當(dāng)主進程檢測到客戶端的連接請求時,與所述客戶端建立連接;
[0073]創(chuàng)建單元502,用于當(dāng)與所述客戶端連接成功時,所述主進程創(chuàng)建與所述客戶端對應(yīng)的套接字;
[0074]分配單元503,用于將所述創(chuàng)建單元創(chuàng)建的套接字分配給子進程;
[0075]管道建立單元504,用于所述子進程與所述主進程進行網(wǎng)絡(luò)通信;
[0076]處理單元505,用于處理所述客戶端的業(yè)務(wù)請求。
[0077]在具體實施中,所述子進程可以由所述主進程預(yù)先啟動,所述子進程的數(shù)目可以預(yù)先設(shè)定。
[0078]在具體實施中,所述創(chuàng)建單元502,還可以用于當(dāng)與所述客戶端連接成功時,獲取并保存所述連接成功的客戶端的端口和地址。
[0079]在具體實施中,所述Linux服務(wù)器的連接裝置還可以包括:存儲單元506,用于保存所述連接成功的客戶端的端口和地址與所述分配單元分配的子進程的對應(yīng)關(guān)系。
[0080]在具體實施中,所述Linux服務(wù)器的連接裝置還可以包括:判斷單元507,用于判斷所述請求連接的客戶端的端口和地址是否已經(jīng)保存,并當(dāng)所述請求連接的客戶端的端口和地址已經(jīng)保存時,將所述套接字分配給上一次與所述客戶端連接的子進程。
[0081 ] 在具體實施中,所述分配單元503,還可以用于將所述連接成功的客戶端的端口和地址號轉(zhuǎn)換成字符串,對所述字符串進行信息一摘要算法MD5運算,得到所述字符串的MD5值,以所述子進程的數(shù)目為分母對所述字符串的MD5值求余,利用所述求余結(jié)果選擇相應(yīng)的子進程。
[0082]本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:ROM、RAM、磁盤或光盤等。
[0083]雖然本發(fā)明披露如上,但本發(fā)明并非限定于此。任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與修改,因此本發(fā)明的保護范圍應(yīng)當(dāng)以權(quán)利要求所限定的范圍為準(zhǔn)。
【權(quán)利要求】
1.一種Linux服務(wù)器的連接方法,其特征在于,包括: 主進程檢測到客戶端的連接請求,與所述客戶端建立連接; 當(dāng)與所述客戶端連接成功時,所述主進程創(chuàng)建與所述客戶端對應(yīng)的套接字,并將所述套接字分配給子進程; 所述子進程利用所述套接字與所述客戶端進行網(wǎng)絡(luò)通信,處理所述客戶端的業(yè)務(wù)請求。
2.如權(quán)利要求1所述的Linux服務(wù)器的連接方法,其特征在于,所述子進程由所述主進程預(yù)先啟動,所述子進程的數(shù)目預(yù)先設(shè)定。
3.如權(quán)利要求1所述的Linux服務(wù)器的連接方法,其特征在于,所述當(dāng)與所述客戶端連接成功時,還包括:獲取并保存所述連接成功的客戶端的端口和地址,獲取并保存所述子進程的標(biāo)識。
4.如權(quán)利要求3所述的Linux服務(wù)器的連接方法,其特征在于,所述當(dāng)與所述客戶端連接成功時,還包括:判斷所述客戶端的端口和地址是否已經(jīng)保存,當(dāng)所述請求連接的客戶端的端口和地址已經(jīng)保存時,將所述套接字分配給上一次與所述客戶端連接的子進程。
5.如權(quán)利要求3所述的Linux服務(wù)器的連接方法,其特征在于,所述獲取所述子進程的標(biāo)識,包括:將所述連接成功的客戶端的端口和地址號轉(zhuǎn)換成字符串,對所述字符串進行信息一摘要算法MD5運算,得到所述字符串的MD5值,以所述子進程的數(shù)目為分母對所述字符串的MD5值求余,利用所述求余結(jié)果選擇相應(yīng)的子進程。
6.如權(quán)利要求1所述的L inux服務(wù)器的連接方法,其特征在于,所述將所述套接字傳遞給子進程,包括:將所述套接字通過管道傳遞給子進程。
7.—種Linux服務(wù)器的連接裝置,其特征在于,包括: 連接建立單元,用于當(dāng)主進程檢測到客戶端的連接請求時,與所述客戶端建立連接; 創(chuàng)建單元,用于當(dāng)與所述客戶端連接成功時,所述主進程創(chuàng)建與所述客戶端對應(yīng)的套接字; 分配單元,用于將所述創(chuàng)建單元創(chuàng)建的套接字分配給子進程; 管道建立單元,用于所述子進程與所述主進程進行網(wǎng)絡(luò)通信; 處理單元,用于處理所述客戶端的業(yè)務(wù)請求。
8.如權(quán)利要求7所述的Linux服務(wù)器的連接裝置,其特征在于,所述子進程由所述主進程預(yù)先啟動,所述子進程的數(shù)目預(yù)先設(shè)定。
9.如權(quán)利要求7所述的Linux服務(wù)器的連接裝置,其特征在于,所述創(chuàng)建單元,還用于當(dāng)與所述客戶端連接成功時,獲取并保存所述連接成功的客戶端的端口和地址。
10.如權(quán)利要求9所述的Linux服務(wù)器的連接裝置,其特征在于,還包括:存儲單元,用于保存所述連接成功的客戶端的端口和地址與所述分配單元分配的子進程的對應(yīng)關(guān)系。
11.如權(quán)利要求9所述的Linux服務(wù)器的連接裝置,其特征在于,還包括:判斷單元,用于判斷所述請求連接的客戶端的端口和地址是否已經(jīng)保存,并當(dāng)所述請求連接的客戶端的端口和地址已經(jīng)保存時,將所述套接字分配給上一次與所述客戶端連接的子進程。
12.如權(quán)利要求7所述的Linux服務(wù)器的連接裝置,其特征在于,所述分配單元,還用于將所述連接成功的客戶端的端口和地址號轉(zhuǎn)換成字符串,對所述字符串進行信息一摘要算法MD5運算,得到所述字符串的MD5值,以所述子進程的數(shù)目為分母對所述字符串的MD5值求余,利用所述 求余結(jié)果選擇相應(yīng)的子進程。
【文檔編號】H04L29/06GK103746977SQ201310741784
【公開日】2014年4月23日 申請日期:2013年12月27日 優(yōu)先權(quán)日:2013年12月27日
【發(fā)明者】馮昊, 何衛(wèi)華, 單日強, 李昌忠, 李強 申請人:東軟熙康健康科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
八宿县| 常宁市| 朝阳县| 高碑店市| 双辽市| 阿克陶县| 山西省| 那曲县| 河北区| 榆社县| 麦盖提县| 泰安市| 毕节市| 柳林县| 句容市| 昆山市| 邢台市| 托克逊县| 宿州市| 黔西县| 宽甸| 屏东市| 呼玛县| 岗巴县| 建湖县| 来宾市| 英山县| 屯昌县| 乐业县| 延川县| 福贡县| 台江县| 桃园市| 盐池县| 建昌县| 荔波县| 根河市| 微山县| 阳高县| 达尔| 漠河县|