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

基于完成端口的網絡服務應用程序開發

2009-07-13 10:09:06王愛平
新媒體研究 2009年21期
關鍵詞:用戶

王愛平 唐 玄

[摘要]由于互聯網的普及,在線人數也越來越多,這就提高對服務器端應用程序性能的要求。因此,講述windows平臺上高性能網絡服務應用程序的開發方法。

[關鍵詞]完成端口IOCP網絡服務

中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)1110084-01

一、引言

隨著網絡的廣泛應用,企事業單位、公司都需要開發網絡服務應用程序,用于和客戶進行交互。網絡服務應用程序一般可采用B/S、C/S模式開發,其中,B/S模式已經廣泛地應用在WEB應用程序上。然而,要實現實時、高性能的網絡服務應用程序,仍需要采用C/S模式的開發方式。在windows操作系統環境下,使用C/S模式開發,主要考慮網絡服務程序的服務器端程序性能,能支持大量用戶并發。這就需要使用完成端口模型來開發服務器端程序。

二、使用完成端口

完成端口,又稱Input/Output Completion Port(IOCP),是windows

操作系統中非常復雜的一種I/O模型。它可以同時為大量的SOCKET提供服務,因此它是windows操作系統中開發高性能網絡應用服務器的首選。

創建完成端口時,windows操作系統會創建一個內核對象。使用完成端口時,將該內核對象與SOCKET進行關聯,則SOCKET產生的事件會通知到該完成端口,此時,就可以通過完成端口對SOCKET進行相關操作了。

使用完成端口常用3個相關函數:

1.CreateIoCompletionPort(

HANDLE FileHandle,

HANDLE ExistingCompletionPort,

ULONG_PTR CompletionKey,

DWORD NumberOfConcurrentThreads);

本函數用來創建完成端口對象、關聯完成端口對象和其他內核對象。

FileHandle是用來和完成端口對象關聯的內核對象句柄;ExistingCo

mpletionPort是已經創建好的完成端口對象句柄,FileHandle所指定的內核對象I/O事件將會通知到該完成端口對象;CompletionKey是完成鍵,可以為任何用戶指定的值,其目的是程序可以借此參數和完成端口之間傳遞值,方便與完成端口之間的通信。NumberOfConcurrentThreads用于指定同時可以并發的線程數量,取0表示并發線程數據為系統中CPU的數量。

2.GetQueuedCompletionStatus(

HANDLE CompletionPort,

LPDOWRD lpNumberOfBytesTransferred,

PULONG_PTR lpCompletionKey,

LPOVERLAPPED *lpOverlapped,

DWORD dwMilliseconds);

本函數用來獲取完成端口狀態。調用本函數后,線程掛起。當與該完成端口相關聯的內核對象I/O操作完成時,喚醒線程。

CompletionPort為完成端口對象句柄;lpNumberOfBytestTransferred

是I/O操作中傳輸的字節數;lpCompletionKey是調用CreateIoCompletionP

Ort時傳入的CompletionKey參數;lpOverlapped為LPOVERLAPPED的指針類型,是操作系統管理完成端口需要的系統類型,通常I/O傳輸緩沖區是由該結構指定的;dwMilliseconds指定超時時間。

3.PostQueruedCompletionStatus(

HANDLE CompletionPort,

DWORD dwNumberOfBytesTransferred,

ULONG_PTR lpCompletionKey,

LPOVERLAPPED *lpOverlapped);

本函數用來向完成端口發送信息以改變程序流程。

三、系統設計

服務器程序主線程程序流程:1.調用CreateIoCompletionPort函數創建完成端口;2.調用_beginthreadex函數創建一定數量工作者線程ThreadProc;3.調用socket函數創建偵聽套接字并使用listen函數在指定端口開始偵聽;4.調用WSAAccept函數等待客戶端連接(此時主線程將掛起)。當客戶端連接成功,則創建完成鍵(一般包含客戶端相關信息),關聯完成端口與WSAccept返回的新套接字句柄,并向該套接字句柄投遞一個或多個異步WSARecv或WSASend請求。循環執行本操作,直至程序結束。

服務器程序工作者線程程序流程:調用GetQueuedCompletionPort函數,線程掛起。當操作系統喚醒該線程時,GetQueuedCompletionPort返回I/O傳輸相關信息。此時,根據返回相關參數值執行相應程序。

四、改進措施

1.使用AcceptEx。由于WSAAccept調用之后,主線程將會被阻塞,直到有客戶端連接時才被喚醒;而且,當某個客戶端連接的時候,獨占主線程,其它客戶端將無法連接服務器。因此,這里可以采用異步函數AcceptEx。使用AcceptEx函數可以同時創建多個套接字,并使它們處于等待用戶連接狀態。而且,AcceptEx也采用了OVERLAPPED結構,它也可以和完成端口相關聯,可以在工作者線程中統一處理客戶端連接事件。這樣,就提高了接受客戶端連接的效率。

2.使用線程池。microsoft推薦使用的線程數為CPU數量乘以2加1,這是為了避免線程頻繁切換引起的系統開銷,這也是完成端口的優點。但實際上,服務請求所需數量不應用永遠取此值,它取決于應用程序的總體設計情況。如果系統中現有工作者線程均處于掛起或鎖定狀態,這時就需要額外創建新的工作者線程來響應I/O操作,從而提高整個系統的運行效率。

3.使用內存池。在新用戶連接服務器時,需要為每一個用戶分配一個結構體存儲OVERLAPPED結構、數據傳輸緩沖區、完成鍵等信息。如果每來一個用戶,就分配一塊內存,服務器就需要頻繁地開辟新空間;而如果每一個用戶斷開連接時,服務器就需要頻繁地釋放所占內存。這樣會導致系統性能下降。因此,服務器應用程序可以預先分配一定數量內存,當新用戶連接服務器時,從中獲取一塊標識為“未使用”的內存用于保存信息,標識為“已占用”;當該用戶斷開與服務器連接時,標識該塊內存為“未使用”。這樣,就可以有效地避免了服務器頻繁地分配與釋放內存。

五、結束語

經測試,使用完成端口設計的服務器端應用程序可以充分發揮服務器的性能,支持海量用戶連接與傳輸信息。

參考文獻:

[1]Jeffrey Richter,windows核心編程,機械工業出版社[M].北京,2005年9月.

[2]Jeffrey Richter,windows高級編程指南,清華大學出版社[M].北京,2001年12月.

猜你喜歡
用戶
雅閣國內用戶交付突破300萬輛
車主之友(2022年4期)2022-08-27 00:58:26
您撥打的用戶已戀愛,請稍后再哭
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年5期)2016-11-28 09:55:15
兩新黨建新媒體用戶與全網新媒體用戶之間有何差別
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
挖掘用戶需求尖端科技應用
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 国产精品午夜福利麻豆| 91国内在线观看| 天天综合亚洲| 亚洲色精品国产一区二区三区| 国产精品亚洲精品爽爽| 成人字幕网视频在线观看| 国产男女XX00免费观看| 高h视频在线| 91网红精品在线观看| 国产激情无码一区二区免费| 国产欧美日韩一区二区视频在线| 91青青草视频在线观看的| 日韩黄色精品| 国产高清国内精品福利| 国产精品私拍在线爆乳| 亚洲男人的天堂视频| 亚洲制服中文字幕一区二区 | 中文字幕2区| 亚洲成人免费在线| 国产91麻豆视频| 在线免费看片a| 日韩黄色在线| 免费aa毛片| 国产噜噜噜视频在线观看 | 2021国产乱人伦在线播放| 99热这里只有精品久久免费| 亚洲国产欧洲精品路线久久| 久久免费成人| 99热这里只有精品免费国产| 欧美视频在线不卡| 国产青青操| 91最新精品视频发布页| 国产嫩草在线观看| 亚洲美女久久| 狠狠色成人综合首页| 国产精品任我爽爆在线播放6080| 亚洲日本中文综合在线| 伊伊人成亚洲综合人网7777| 另类综合视频| 日本欧美午夜| 欧美另类图片视频无弹跳第一页| 亚洲一区免费看| 青青草久久伊人| 精品久久久久久久久久久| 五月天久久婷婷| 欧美激情首页| 91成人免费观看| 国产成人艳妇AA视频在线| 中文无码精品a∨在线观看| 欧美成人怡春院在线激情| 伊人查蕉在线观看国产精品| 最新国产网站| 亚洲成人黄色在线观看| 久久婷婷五月综合97色| 亚洲最新网址| 毛片大全免费观看| 免费欧美一级| 国产成人免费观看在线视频| av午夜福利一片免费看| 国产成年无码AⅤ片在线| 久久五月天综合| 一区二区自拍| 美女一级毛片无遮挡内谢| 一级毛片免费观看不卡视频| 欧美亚洲一区二区三区在线| 成年片色大黄全免费网站久久| 青青久久91| 亚洲第一区精品日韩在线播放| 男女男免费视频网站国产| 精品久久久久无码| 久久婷婷人人澡人人爱91| 久久久久久午夜精品| 美女啪啪无遮挡| 欧美综合一区二区三区| 综合色88| 久久亚洲美女精品国产精品| 国产福利一区视频| 亚洲永久视频| 青草娱乐极品免费视频| 最近最新中文字幕在线第一页| 啦啦啦网站在线观看a毛片| 亚洲色图综合在线|