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

基于完成端口的文件傳輸設計

2019-03-30 03:49:19陳李飛
數字技術與應用 2019年12期

陳李飛

摘要:本文主要討論使用SocketAsyncEventArgs這個類,利用完成端口并且結合異步事件的方式,設計一個服務端的消息傳送中心,從而提高服務器端處理高并發的性能,并避免在異步套接字 I/O 量非常大時發生重復的對象分配和同步。

關鍵詞:完成端口;文件傳輸;套接字

中圖分類號:TN915.05 文獻標識碼:A 文章編號:1007-9416(2019)12-0173-02

1 完成端口簡介

“完成端口”模型是迄今為止最為復雜的一種I/O模型。然而,假若一個應用程序同時需要管理為數眾多的套接字,那么采用這種模型,往往可以達到最佳的系統性能!但不幸的是,該模型只適用于Windows NT和Windows 2000操作系統[1]。因其設計的復雜性,只有在你的應用程序需要同時管理數百乃至上千個套接字的時候,而且希望隨著系統內安裝的CPU數量的增多,應用程序的性能也可以線性提升,才應考慮采用“完成端口”模型。要記住的一個基本準則是,假如要為Windows NT或Windows 2000開發高性能的服務器應用,同時希望為大量套接字I/O請求提供服務(Web服務器便是這方面的典型例子),那么I/O完成端口模型便是最佳選擇[2]!

在.net中,一旦說到完成端口,我們就不得不提到SocketAsync EventArgs這個高性能的類,其內部是基于完成端口實現的,然后被微軟提供了諸多封裝,所以使用起來也比較簡單一些。由于這個類利用完成端口并且結合異步事件的方式進行設計的[3],所以我們可以大致的知道他的一些特點。

2 處理流程

關于SocketAsyncEventArgs類,微軟的解釋很多,但是始終離不開高性能三個字。根據我的理解,如果利用此類設計一個服務端的消息傳送中心,那么其運作流程如下[1]:

(1)創建SocketAsyncEventArgs池,并且創建緩沖管理中心,負責對池中的對象分配緩沖大小。

(2)創建服務器套接字,并處于監聽狀態。同時創建基于Socket AsyncEventArgs的客戶端接收對象,接收客戶端的連接。

(3)如果有客戶端連接, 客戶端接收對象將會把控制權移交給數據接收對象,數據接收對象開始接收數據。

這只是一個簡單的流程,從這里我們可以看出,服務端套接字只是負責監聽,一旦有客戶端連接,就會把連接事件拋給接收對象;所以客戶端一個一個的來,服務端一個一個的拋,性能自然會好了不少。

3 緩沖

說到緩沖,我們很容易理解為一個存儲池,里面可以放入東西,也可以拿走。在SocketAsyncEventArgs類中,我們可以利用其SetBuffer方法初始化緩沖區[4]。

比如說:receiveArgs。SetBuffer(new byte[10],0,5);他的意思就是為當前接收數據對象設置的緩沖區大小為10字節,位置從0開始,并且允許接收的最大的數據長度為5字節。

當數據被接收,然后寫入到緩沖區的時候,數據會按照預先設定好的緩沖規則進行放置。比如這里我輸入aaaaa,那么在緩沖區會放入如下數據:

但是當有新的數據再進來的時候,比如這里我輸入了bbbb,那么緩沖區就變成了:

如上圖所示,緩沖區中第五位依然是我們前一次插入的值,所以,在這里我提醒大家,緩沖區的東西取完之后,一定要重置一下,否則臟數據會導致數據錯誤。

講到這里,也許有人會說,假如我插入aaaaab會怎么樣,其實,這個長度已經超過了緩沖區的長度,緩沖區將會做截斷處理,然后當作兩段放入緩存中,首先會是:

然后會是:

所以如果這個時候你的數據沒有被及時取走的話,將會得到最終結果:

這不,已經發生粘包現象了。

4 拋出方式

說完緩沖,這里我們需要說到的是服務端套接字是如何將接收的客戶端通過事件的方式拋給SocketAsyncEventArgs對象的。

在進行服務端,我們一般都會有一個用于監聽的套接字,套接字會利用serverSocket。AcceptAsync(SocketAsyncEventArgs)異步方法注冊SocketAsyncEventArgs對象,然后一旦有客戶端連接,就會激發SocketAsyncEventArgs對象的Completed事件,然后,在這個事件中,serverSocket會通過ReceiveAsync(SocketAsync EventArgs)異步方法將數據處理的過程交給另外一個專門負責數據處理的對象去完成,這樣,客戶端連接,服務端只負責將連接事件拋給SocketAsyncEventArgs對象即可,比起傳統的編程方式:服務端既負責監聽,又負責接收,效率極大的提升。如圖1所示。

5 同步方式

最后說到的是同步問題,因為在異步交互的系統中,同步問題確實很重要,尤其是當客戶端和服務器同步的時候。

客戶端里面的線程同步,我們可以利用AutoResetEvent來實現,客戶端和服務端同步的時候,我們需要AutoResetEvent并且結合一些標記信息來進行,也就是客戶端往服務器發送的一些小標記,比如1代表可以進行,0代表取消等等。

在設計的時候,我們還需要記住的是,代碼的核心只是負責數據的傳輸,不要加過多的邏輯判斷在里面,否則會影響性能,邏輯判斷等最好移到界面處理處來進行。

參考文獻

[1] 楊勇.基于完成端口模型的網絡服務器性能優化研究[J].科教導刊(下旬),2016(12):35-36+81.

[2] 王允,蘇寧.基于完成端口的高性能.Net網絡通信服務器模型[J].信息與電腦(理論版),2016(9):23-24.

[3] 李龍.基于Windows的雷達系統操控軟件的設計與實現[J].科技信息,2012(21):54-55.

[4] 王璋.基于完成端口模型的大流量服務器開發模式探究[J].福建電腦,2007(2):45-46.

Design of? File Transfer Based on Completion Port

CHEN Li-fei

(Suzhou Higher Vocational and Technical School,Suzhou? Jiangsu? 215009)

Abstract:This paper mainly discusses how to use socketasynceventargs to design a message transmission center of the server side by using the completion port and combining with asynchronous events, so as to improve the performance of the server side in dealing with high concurrency and avoid repeated object allocation and synchronization when the amount of asynchronous socket I/O is very large.

Key words:completion port;file transfer;socket

主站蜘蛛池模板: 又爽又黄又无遮挡网站| 91探花国产综合在线精品| 久久人人妻人人爽人人卡片av| 久久semm亚洲国产| 99热最新在线| 亚洲综合一区国产精品| 日韩精品久久无码中文字幕色欲| 国产婬乱a一级毛片多女| 在线免费观看AV| 99re热精品视频中文字幕不卡| 精品国产福利在线| 亚洲精品成人7777在线观看| 亚洲成人精品在线| 91无码网站| 欧美一区福利| 日本爱爱精品一区二区| 99在线观看国产| 日韩精品亚洲一区中文字幕| 久久99久久无码毛片一区二区| 欧美A级V片在线观看| 久久午夜夜伦鲁鲁片无码免费| 国产凹凸一区在线观看视频| 97国产精品视频人人做人人爱| 伊人成人在线视频| 国产日本视频91| 国产成人综合日韩精品无码首页| 丁香五月激情图片| 性69交片免费看| 国内精品视频| 视频一区视频二区日韩专区| 色婷婷综合在线| 国产青青操| 欧美人与牲动交a欧美精品| 久久亚洲精少妇毛片午夜无码| 国产无码在线调教| 国产精品第一区| 四虎在线观看视频高清无码| 日本国产精品| 亚洲国产系列| 欧美伦理一区| 国产日韩精品一区在线不卡| 精品国产乱码久久久久久一区二区| 国产精品久久久久久久久久98| 日韩123欧美字幕| 欧美色丁香| 国产日本欧美在线观看| 成人国产精品一级毛片天堂| 91在线国内在线播放老师| 54pao国产成人免费视频| 日韩欧美国产综合| 国产福利在线免费| 欧美中日韩在线| 欧美亚洲另类在线观看| 最新痴汉在线无码AV| 9丨情侣偷在线精品国产| 丁香五月激情图片| 手机在线看片不卡中文字幕| 美女内射视频WWW网站午夜| h网址在线观看| 亚洲中文字幕久久无码精品A| 伊人久久久久久久久久| 久久久久国产精品熟女影院| 97视频在线精品国自产拍| 91精品啪在线观看国产| 精品国产香蕉伊思人在线| 欧美激情成人网| 国产又粗又爽视频| 精品国产电影久久九九| 国产福利影院在线观看| 日韩AV无码一区| 日本在线视频免费| 国产成人a毛片在线| 99国产在线视频| 亚洲中文无码av永久伊人| 综合久久五月天| 国产69精品久久久久孕妇大杂乱 | 在线免费亚洲无码视频| 亚洲AⅤ综合在线欧美一区| 国内老司机精品视频在线播出| 欧美第一页在线| 亚洲人在线| 国产成人成人一区二区|