999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Select模式下級聯文件傳輸服務器的實現

2020-11-16 06:56:38邰非林健偉張開驍王國棟
數字技術與應用 2020年9期

邰非 林健偉 張開驍 王國棟

摘要:Select是Windows操作系統提供的一個API函數,它具備強大的網絡探測能力且使用方便。眾所周知,在阻塞模式下網絡通訊可能造成進程掛起,較為可靠的方法是采用非阻塞模式,但Windows底層所提供的socket函數在非阻塞方式下返回值可信度很低,如果通過Select模式結合超時處理來獲取返回狀態,會大大提升程序返回值的可信度。本文采用java語言來實現一個基于TCP/UDP協議的級聯文件傳輸服務器,其中利用Select模式對端口的可讀寫性進行探測。通過實際測試,在有效地防止進程掛起的同時能準確獲取返回值,從而正確判斷端口狀態,從側面增強系統的健壯性與可維護性。

關鍵詞:Select;阻塞模式;非阻塞模式

中圖分類號:TP393 文獻標識碼:A 文章編號:1007-9416(2020)09-0048-03

0 引言

隨著互聯網的迅猛發展,網絡應用已經越來越廣泛地融入到各行各業,各種傳統設備、業務模式也正向網絡化、智能化、集成化方向發展。在其中網絡通訊扮演著一個重要且不可缺少角色,但由于各種軟、硬件及周邊環境等因素的影響,通訊網絡上的擁塞情況時常發生,這會造成數據在傳輸中產生丟包、抖動等現象,從而造成網絡性能指標下降。

近幾年對網絡擁塞問題的研究及提出的解決方案層出不窮,針對具體應用在一定程度上為提升網絡性能起到了很好的作用。本文則是通過Windows所提供的Select API[1]函數的功能與特點,結合實際用例,對網絡擁塞所造成的函數返回值不穩定性做了進一步的修正,從而給出穩定性、可靠性較高的返回值,為進一步查明網絡擁塞原因并給出解決方案提供了技術上的支持。

1 技術路線背景

1.1 Select簡介

選擇Select可以實現非阻塞式處理方式,此時進程或線程執行此函數時不必等待事件發生,一旦執行肯定返回,其返回值表示函數執行的情況,從中可獲取需要監視的文件描述符變化情況即:讀寫正常或是異常。

Select[1]的函數格式:int select(int maxfdp,fd_set *readfds,fd_set*writefds,fd_set *errorfds,struct timeval *timeout);maxfdp為整型參數,在Unix系統中是指文件描述符的范圍,Windows中該參數值可以不設。*readfds結構體指針,用以存放文件描述符即文件句柄,可以是普通文件也可以是設備、管道、FIFO,主要提供讀狀態變化。*writefds指針變量則是負責文件句柄寫狀態獲取。*errorfds為記錄異常狀態的結構體指針。timeval結構體指針代表以秒或毫秒計量的時間值,這個參數至關重要,它可以使select處于三種狀態:(1)賦值NULL時是將Select置于阻塞狀態。(2)賦值為0時表示純粹的非阻塞函數,不管文件描述符是否有變化,都立刻返回繼續執行,文件無變化返回0,有變化返回一個正值。(3)賦值大于0則為超時時間,即select在timeout時間內阻塞,超時時間之內有事件到來就返回了,否則在超時后不管怎樣一定返回,返回值同上述。

1.2 基于Select的服務器架構與流程

圖1所示為級聯服務器和客戶端的物理部署圖,為了簡單起見,此處只給出了一個客戶端連接狀態,各級服務器上運行的服務進程是相同的,它們之間通過TCP[2-3]連接。客戶端與服務器端下載文件通道則使用UDP[2-3]。

圖2給出了文件查找和傳輸的流程,服務器首先要進行初始化,客戶端發起下載文件請求給第一個級聯服務器,該服務器查詢本地文件,如果有則推送文件,如果沒有則轉發到下一級級聯服務器,依此類推直到最后一級級聯服務器,如果沒有查到文件則仍依次將錯誤信息返回給客戶端。

在服務器與服務器以及服務器與客戶端之間通訊中,我們采用了Select模式去探測可能出現的各種通訊故障,通過返回值及時給出應對處理。部分關鍵代碼[4]如圖3所述。

2 實現算法描述

文件服務器有三個通訊端口:P、P+1、P+2。服務器啟動時P端口進行UDP[2-3]監聽,主要負責接收查詢字符協議。P+1進行TCP[2-3]監聽,用以維護服務器間的連接。P+2進行UDP[2-3]監聽,響應自客戶端的初始化通知。

考慮到客戶端是不斷變動的,此處用UDP監聽是利用其無狀態特性,如果用TCP則會出現TIME_WAIT,每四分鐘才可重新連接,效率極低。P+1和P+2端口只要其中一個收到上一級服務器的初始化數據包,另一個則會自動關閉,從而節省資源。對于中間(非最后)服務器和客戶端則需要在啟動和查尋時通知下一級服務器,客戶端利用UDP協議連接下一級服務器的P+2端口,服務器用轉發端口連接下一級服務器的P+1端口。所有服務器初始化完成后,一個通暢的文件傳輸網絡就構建起來[5]。

客戶端請求發出到服務器上,服務器將查找本地共享目錄中是否有該文件。沒有則將查找請求發送到自己的下一服務器。如果有該文件則發送文件到客戶端。對于非第一服務器,如果有該文件將會把結果發送到上服務器的TEMP端口,而TEMP端口繼續轉發直到客戶端。而當查找請求到最后服務器時,還沒有該文件,將返回字符串“wrong!”到上一服務器的TEMP端口,直到服務器,服務器會給出找不到該文件的提示。

圖4中給出了客戶端、中間服務器、終端服務器關鍵線程調用時序圖[6],客戶端設置了兩類超時,一是初始化通訊超時,另一個則為接收文件超時,主要用以提高交互的效率。服務器端則提供更新實際存儲文件服務器IP地址的線程服務,也是基于效率考慮的。

3 結語

在文件服務器與客戶端程序中使用Select實時對網絡的通訊狀態進行監控,有利于及時獲取網絡狀態,以便做更進一步的優化擴展。本文中將這種便捷用于文件傳輸服務器上,從實際使用效果來看能很好地應對網絡異常情況下的策略調整,當然程序還有進一步優化的空間,另外這種模式也可以用在其它復雜環境下的網絡通訊程序之中。

參考文獻

[1] Jeffrey Richter.Windows核心編程(第5版 中文版)[M].北京:清華大學出版社,2008.

[2] W.RICHARD STEVENS.TCP/IP Illustrated Volume 1(The Protocols)[M].北京:機械工業出版社,2005.

[3] 孫曉剛.面向軟件工程的Visula C++網絡程序開發[M].北京:清華大學出版社,2004.

[4] BJARNE STROUSTRUP.The C++ Programming Language(special Edition)[M].北京:高等教育出版社,2003.

[5] Martin Fowler.重構:改善既有代碼的設計(中文版)[M].北京:中國電力出版社,2006.

[6] James Rumbaugh.The Unified Modeling Language Reference Manual[M].the United States of America:Addison Wesley Longman,Inc,1998.

主站蜘蛛池模板: 国产性爱网站| 久久精品亚洲中文字幕乱码| 免费又爽又刺激高潮网址 | 免费在线看黄网址| 国产女人水多毛片18| 国产丝袜第一页| 三级国产在线观看| 欧美性色综合网| 亚洲欧美另类日本| 自拍偷拍欧美| 婷婷五月在线| 一级毛片中文字幕| 欧美五月婷婷| 久久精品91麻豆| 国产激情无码一区二区三区免费| 美女无遮挡免费视频网站| 中文字幕免费在线视频| a在线亚洲男人的天堂试看| 国产精品成人免费视频99| 91久久夜色精品国产网站| 特级精品毛片免费观看| 在线播放国产99re| 欧美中文一区| 精品五夜婷香蕉国产线看观看| 亚洲AV色香蕉一区二区| 日韩人妻无码制服丝袜视频| 暴力调教一区二区三区| 国产成人1024精品| 亚洲AV免费一区二区三区| 高清不卡一区二区三区香蕉| 国产一级小视频| 一区二区三区成人| 欧美激情视频二区三区| 精品1区2区3区| 欧美日韩福利| 免费无遮挡AV| 久久婷婷五月综合色一区二区| 激情综合五月网| 国产国语一级毛片在线视频| 亚洲AV成人一区二区三区AV| 亚洲精品男人天堂| 国产一级二级在线观看| 三级国产在线观看| 欧美人在线一区二区三区| 国产成人av大片在线播放| 亚洲天堂成人在线观看| 91亚瑟视频| 欧洲一区二区三区无码| 亚洲黄网视频| 天堂网亚洲综合在线| 国产亚洲欧美在线专区| 狠狠色丁婷婷综合久久| 亚洲精品色AV无码看| 中文字幕在线免费看| 日本午夜影院| 亚洲中文字幕97久久精品少妇| 26uuu国产精品视频| 精品国产免费人成在线观看| 亚洲日本中文字幕乱码中文| 伊人久综合| 免费在线观看av| 天天色综网| 欧美国产日韩在线| 黄色网站不卡无码| 国产综合日韩另类一区二区| 99re经典视频在线| 亚洲一道AV无码午夜福利| 不卡国产视频第一页| 最新亚洲人成无码网站欣赏网| 日韩精品欧美国产在线| 国产免费精彩视频| 久久精品无码国产一区二区三区| 亚洲精品成人福利在线电影| 久久久久久国产精品mv| 欧美成人午夜视频| 福利国产微拍广场一区视频在线| 91精品免费高清在线| 丁香婷婷在线视频| 婷婷五月在线| 日韩麻豆小视频| 国产精品性| 亚洲综合片|