最近要做乙個網路方面的小東東,基於c/s模式的。都說iocp可以使系統達到最佳的效能,因此我就比劃了兩下,獻醜了。抄書開始。
從本質上說,完成埠模型要求建立乙個windows完成埠物件,該物件通過指定數量的執行緒,對重疊i/o請求進行管理,以便為已經完成的重疊i/o請求提供服務。
首先要建立乙個i/o完成埠物件,用它面向任意數量的套接字控制代碼,管理多個i/o請求。呼叫以下函式建立完成埠物件:
handle createiocompletionport(
handle filehandle,// 同iocp關聯在一起的套接字控制代碼
handle existingcompletionport,// iocp控制代碼
ulong_ptr completionkey, // 完成健
dword numberofconcurrentthreads // 在iocp上,同時允許執行的執行緒數量
);該函式有兩個作用:
(1)建立乙個完成埠物件
(2)將乙個控制代碼同完成埠關聯到一起
然後就要建立一定數量的工作者執行緒,以便在套接字的i/o請求投遞給完成埠後,為完成埠提供服務。寫文字描述很煩,還是看**吧:
#include "stdafx.h"
#include "netserver3.h"
#include
#pragma comment(lib, "ws2_32.lib")
#include
using namespace std;
#ifdef _debug
#define new debug_new
#undef this_file
static char this_file = __file__;
#endif
// 單句柄資料
typedef struct tagper_handle_data
per_handle_data, *lpper_handle_data;
dword winapi serverworkerthread(lpvoid lpparam);
using namespace std;
int _tmain(int argc, tchar* argv, tchar* envp)
internetaddr.sin_family = pf_inet;
internetaddr.sin_port = htons(5000);
internetaddr.sin_addr.s_addr = htonl(inaddr_any);
bind(listen, (sockaddr*)&internetaddr, sizeof(internetaddr));
listen(listen, 5);
bool b = true;
while (b)
// 先檢查一下,看看是否在套接字上已有錯誤發生
if (0 == bytestransferred)
// 資料處理
// 成功了!!!這兒就收到了來自客戶端的資料
cout << periodata->databuf.buf << endl;
flags = 0;
return 0;
}
完成埠IO模型
iocp io完成埠 是一種伸縮性的io模型,廣泛應用於各種型別的高效能伺服器,如apache等。io完成埠,應用程式使用執行緒池處理非同步io請求的一種機制。最初設計 應用程式發出一些非同步io請求,裝置驅動把這些工作專案排序到完成埠,在完成埠上等待執行緒池便可以處理這些完成io。完成埠實際上是乙...
完成埠模型服務端
windows 完成埠模型服務端 include include pragma comment lib,ws2 32.lib using namespace std const int serverport 4399 const int msgsize 1024 typedef enum opera...
ACE 實現 完成埠 win32 I O模型
在win32平台上最有效率的io模型,莫過於完成埠了。csdn上到處都是關於完成埠的問題。在ace中對win32平台的完成埠有著非常好的封裝。ace中前攝式框架的win32實現就是使用的完成埠。我們先來看看這個框架有哪些組成部分。ace proactor 前攝器,真怪異的名字。叫非同步事件分配者多好...