欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SOCKET重疊I/O模型-創(chuàng)新互聯(lián)

1重疊模型的優(yōu)點(diǎn)

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了房縣免費(fèi)建站歡迎大家使用!

1可以運(yùn)行在支持Winsock2的所有Windows平臺(tái),而不像完成端口只支持NT系統(tǒng)

2比起阻塞,select,WSAAsyncSelect以及WSAEventSelect等模型,重疊I/O(Overlapped I/O)模型使應(yīng)用程序能達(dá)到更加系統(tǒng)性能

因?yàn)樗推渌?種模型不同的是,使用重疊模型的應(yīng)用程序通知緩沖區(qū)收發(fā)系統(tǒng)直接使用數(shù)據(jù),也就是說(shuō),如果應(yīng)用程序

投遞了一個(gè)10kb大小的緩沖區(qū)來(lái)接收數(shù)據(jù),而數(shù)據(jù)已經(jīng)到達(dá)套接字,則將該數(shù)據(jù)直接拷貝到投遞的緩沖區(qū),

而4種模型中,數(shù)據(jù)達(dá)到并拷貝到單套接字接收緩沖區(qū),此時(shí)應(yīng)用程序會(huì)被告知可以讀入的容量,當(dāng)應(yīng)用程序調(diào)用

接收函數(shù)之后,數(shù)據(jù)才從單套接字緩沖區(qū)拷貝應(yīng)用程序到緩沖區(qū),差別就體現(xiàn)了。

2重疊模型的基本原理

重疊模型是讓應(yīng)用程序使用重疊數(shù)據(jù)結(jié)構(gòu)(WSAOVERLAPPED),一次投遞一個(gè)或多個(gè)Winsock I/O請(qǐng)求,針對(duì)這些提交的

請(qǐng)求,在他們完成之后,應(yīng)用程序會(huì)收到通知,于是就可通過自己的代碼來(lái)處理這些數(shù)據(jù)了。

使用事件通知的方法來(lái)實(shí)現(xiàn)重疊IO模型,基于事件的話,就要求將Win事件與WSAOVERLAPPED結(jié)構(gòu)關(guān)聯(lián)在一起,


使用重疊結(jié)構(gòu),常用的send,sendto,recv,recvform也被WSASend,WSARecv等替換掉,

OVERLAPPER SOCKET(重疊Socket)上進(jìn)行重疊發(fā)送的操作,(簡(jiǎn)單的理解就是異步send,recv)

他們的參數(shù)中都有一個(gè)Overlapped參數(shù),就是說(shuō)所有的重疊Socket都要綁定到這個(gè)重疊結(jié)構(gòu)體上,

提交一個(gè)請(qǐng)求,其他的事情就交給重疊結(jié)構(gòu)去操心, 而其中重疊結(jié)構(gòu)要與Windows事件綁定在一起,

在樣,我們調(diào)用完WSARecv后.等重疊操作完成,就會(huì)有對(duì)應(yīng)的事件來(lái)同意我們操作完成,

2重疊模型的基礎(chǔ)知識(shí)

typedef struct _OVERLAPPED {
    ULONG_PTR Internal;
    ULONG_PTR InternalHigh;
    union {
        struct {
            DWORD Offset;
            DWORD OffsetHigh;
        } DUMMYSTRUCTNAME;
        PVOID Pointer;
    } DUMMYUNIONNAME;
    HANDLE  hEvent;  //我們只要關(guān)注這個(gè)參數(shù), 用來(lái)關(guān)聯(lián)事件的
} OVERLAPPED, *LPOVERLAPPED;

2WSARecv系列函數(shù)

在重疊模型中,接收數(shù)據(jù)就要靠他了,他的參數(shù)也比recv多定義是這樣的:

int WSArecv(
    SOCKET s, //投遞這個(gè)操作的套接字
    LPWSABUF lpBuffer,//接收緩沖區(qū),與Recv函數(shù)不同
    LPDWORD lpNumberOfBytesRecvd,//如果接收操作立即完成,這里會(huì)返回函數(shù)調(diào)用
    LPDWORD lpFlags, //默認(rèn)為0
    LPWSAOVERLAPPER lpOverlapper,//綁定的重疊結(jié)構(gòu)
    LPWSAOVERLAPPER_COMPLETION_ROUTINE lpCompletionRoutine //一個(gè)回調(diào)
    );
    返回值:
    WSA_IO_PENDING:常見返回值,說(shuō)明WSARecv操作成功,但是I/O材質(zhì)沒完成,所以需要綁定一個(gè)事件來(lái)通知

3WSAWaitForMultipleEvents函數(shù)


等待某個(gè)事件觸發(fā)的函數(shù),我們需要事件通知我們完成重疊操作,所以需要用到這個(gè)參數(shù)。

這個(gè)函數(shù)只能有WSA_MAXIMUM_WAIT_EVENTS對(duì)象定義的一個(gè)大值,是64,就是他只能等待64個(gè)事件

如果決的小了,就要?jiǎng)?chuàng)建額外的線程,或線程池。

  DWORD WSAWaitForMultipleEvents(
     DWORD cEvents,                        // 等候事件的總數(shù)量
     const WSAEVENT* lphEvents,           // 事件數(shù)組的指針
     BOOL fWaitAll,          // 如果設(shè)置為TRUE則事件中所有的事件被傳信才返回,FALSE是當(dāng)有事件立即返回
     DWORD dwTimeout,    // 超時(shí)時(shí)間,如果超時(shí),函數(shù)會(huì)返回 WSA_WAIT_TIMEOUT
     // 如果設(shè)置為0,函數(shù)會(huì)立即返回  // 如果設(shè)置為 WSA_INFINITE只有在某一個(gè)事件被傳信后才會(huì)返回
        BOOL fAlertable  )     // 默認(rèn)用FALSE
  返回值:
    WSA_WAIT_TIMEOUT :最常見的返回值,我們需要做的就是繼續(xù)等待
    WSA_WAIT_FAILED : 出現(xiàn)了錯(cuò)誤,請(qǐng)檢查cEvents和lphEvents兩個(gè)參數(shù)是否有效

4WSAGetOverlappedResult函數(shù)

既然通過WSAWaitForMultipleEvents函數(shù)來(lái)得到重疊操作的結(jié)果,那我們也需要一個(gè)函數(shù)來(lái)查詢

一下重疊操作的結(jié)果, 這個(gè)函數(shù)不需要關(guān)注返回值

BOOL WSAGetOverlappedResult(
  SOCKET s,                   // SOCKET,不用說(shuō)了
  LPWSAOVERLAPPED lpOverlapped,  // 這里是我們想要查詢結(jié)果的那個(gè)重疊結(jié)構(gòu)的指針
  LPDWORD lpcbTransfer,     // 本次重疊操作的實(shí)際接收(或發(fā)送)的字節(jié)數(shù)
  BOOL fWait,                // 設(shè)置為TRUE,除非重疊操作完成,否則函數(shù)不會(huì)返回
                              // 設(shè)置FALSE,而且操作仍處于掛起狀態(tài),那么函數(shù)就會(huì)返回FALSE
  LPDWORD lpdwFlags       // 指向DWORD的指針,負(fù)責(zé)接收結(jié)果標(biāo)志  
  第二個(gè)參數(shù)是輸出的  第三個(gè)參數(shù)也是輸出的,就是你接收的字節(jié)數(shù) 為0那說(shuō)明對(duì)方關(guān)閉socket了

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文名稱:SOCKET重疊I/O模型-創(chuàng)新互聯(lián)
URL地址:http://chinadenli.net/article48/dehchp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、用戶體驗(yàn)品牌網(wǎng)站制作、小程序開發(fā)、Google、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
免费播放一区二区三区四区| 亚洲国产精品无遮挡羞羞| 欧美91精品国产自产| 久热这里只有精品九九| 国产亚洲精品香蕉视频播放| 欧洲一区二区三区蜜桃| 色无极东京热男人的天堂| 中文字幕一区二区熟女| 视频一区二区 国产精品| 日韩成人午夜福利免费视频| 国产午夜免费在线视频| 国产亚洲精品香蕉视频播放| 色哟哟精品一区二区三区| 欧美精品女同一区二区| 亚洲男人的天堂色偷偷| 亚洲一区二区久久观看| 日本不卡视频在线观看| 色无极东京热男人的天堂| av在线免费播放一区二区| 久久女同精品一区二区| 麻豆精品在线一区二区三区| 少妇熟女精品一区二区三区| 国产毛片不卡视频在线| 精品亚洲一区二区三区w竹菊| 欧美日韩在线第一页日韩| 欧美六区视频在线观看| 中日韩美一级特黄大片| 亚洲欧美日韩网友自拍| 日本东京热视频一区二区三区| 亚洲熟女少妇精品一区二区三区| 国产欧美一区二区久久| 中文字幕日韩精品人一妻| 日本精品免费在线观看| 久久精品蜜桃一区二区av| 日本高清视频在线播放| 四季精品人妻av一区二区三区| 久久精品国产99精品最新| 国产精品一区欧美二区| 国产爆操白丝美女在线观看| 精品国自产拍天天青青草原| 亚洲最新中文字幕一区|