資源簡介
本代碼為一個高并發(fā)量IOCP服務(wù)端模型,IOCP(I/O Completion Port),常稱I/O完成端口。 IOCP模型屬于一種通訊模型,適用于能控制并發(fā)執(zhí)行的高負(fù)載服務(wù)器的一個技術(shù)。 通俗一點(diǎn)說,就是用于高效處理很多很多的客戶端進(jìn)行數(shù)據(jù)交換的一個模型。或者可以說,就是能異步I/O操作的模型。

代碼片段和文件信息
#include?“StdAfx.h“
#include?“.\acceptcontext.h“
#include?“baseDefine.h“
bool?CAcceptContext::m_bInitialized?=?false;
CRITICAL_SECTION?CAcceptContext::m_struCriSec?=?{0};
CContextStack*?CAcceptContext::m_pAcceptContextStack?=?NULL;
CContextStack*?CAcceptContext::m_pAcceptContextManageStack?=?NULL;
CAcceptContext::CAcceptContext(int?opModeSOCKET?listenSocketSOCKET?clientSocket)
{
m_iOperateMode?=?opMode;
m_struListenSocket?=?listenSocket;
m_hSocket?=?clientSocket;
ZeroMemory(&m_struOperateOlsizeof(WSAOVERLAPPED));
ZeroMemory(m_ucAddressbufACCEPT_ADDRESS_LENGTH*2);
}
CAcceptContext::~CAcceptContext(void)
{
????m_iOperateMode?=?SC_WAIT_ACCEPT;
m_struListenSocket?=?NULL;
m_hSocket?=?NULL;
ZeroMemory(&m_struOperateOlsizeof(WSAOVERLAPPED));
ZeroMemory(m_ucAddressbufACCEPT_ADDRESS_LENGTH*2);
}
void?CAcceptContext::SetAcceptParameters(SOCKET?listenSocketSOCKET?clientSocket)
{
m_struListenSocket?=?listenSocket;
m_hSocket?=?clientSocket;
}
void?CAcceptContext::ResetContext()
{
m_struListenSocket?=?NULL;
m_hSocket?=?NULL;
ZeroMemory(&m_struOperateOlsizeof(WSAOVERLAPPED));
ZeroMemory(m_ucAddressbufACCEPT_ADDRESS_LENGTH*2);
}
void?CAcceptContext::InitContextPool(long?poolSize/*?=?DEFAULT_ACCEPT_CONTEXT_POOL*/)
{
if(m_bInitialized)
return?;
m_pAcceptContextStack?=?new?CContextStack();
m_pAcceptContextManageStack??=?new?CContextStack();
if(m_pAcceptContextStack?==?NULL)
return?;
InitializeCriticalSection(&m_struCriSec);
????CAcceptContext*?pContext?=?NULL;
for(int?i=0;i {
pContext?=?new?CAcceptContext(SC_WAIT_ACCEPTNULLNULL);
if(pContext)
{
m_pAcceptContextStack->Push(pContext);//鏈接對象入棧
m_pAcceptContextManageStack->Push(pContext);
pContext->m_iContextIndex?=?m_pAcceptContextManageStack->Size();
}
}
????m_bInitialized?=?true;
}
CAcceptContext*?CAcceptContext::GetContext()
{
if(!m_bInitialized)
return?0;
CAcceptContext*?pContext?=?NULL;
EnterCriticalSection(&m_struCriSec);
if(!m_pAcceptContextStack->IsEmpty())
{
pContext?=?(CAcceptContext*)m_pAcceptContextStack->Pop();
}
else
{
pContext?=?new?CAcceptContext(SC_WAIT_ACCEPTNULLNULL);
pContext->m_iContextIndex?=?m_pAcceptContextManageStack->Size();
m_pAcceptContextManageStack->Push(pContext);
}
LeaveCriticalSection(&m_struCriSec);
//此處有可能會出現(xiàn)線程同步問題
return?pContext;
}
void?CAcceptContext::ReleaseContext()
{
if(this)
{
EnterCriticalSection(&m_struCriSec);
????????m_pAcceptContextStack->Push(this);
LeaveCriticalSection(&m_struCriSec);
}
}
//銷毀整個鏈接池context
void?CAcceptContext::DestroyContextPool()
{
CAcceptContext*?pContext?=?NULL;
int?size?=?m_pAcceptContextStack->Size();
for(int?i=0;i {
pContext?=?(CAcceptContext*)m_pAcceptContextManageStack->Pop();
if(pContext)
{
delete?pContext;
pContext?=?NULL;
}
}
DeleteCriticalSection(&m_struCriSec);
delete?m_pAcceptContextSt
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3847??2018-03-24?15:22??IOCP_Server\IOCP_Server\AcceptContext.cpp
?????文件???????1225??2009-03-05?14:41??IOCP_Server\IOCP_Server\AcceptContext.h
?????文件???????1088??2009-03-07?11:30??IOCP_Server\IOCP_Server\ba
?????文件???????1181??2009-03-05?14:41??IOCP_Server\IOCP_Server\ContextStack.cpp
?????文件????????544??2009-03-07?10:37??IOCP_Server\IOCP_Server\ContextStack.h
?????文件??????17540??2009-02-25?17:00??IOCP_Server\IOCP_Server\IOCP_Server.aps
?????文件????????373??2018-03-24?15:23??IOCP_Server\IOCP_Server\IOCP_Server.cpp
?????文件???????1282??2009-02-25?17:00??IOCP_Server\IOCP_Server\IOCP_Server.rc
?????文件???????5450??2009-03-03?09:34??IOCP_Server\IOCP_Server\IOCP_Server.vcproj
?????文件????????277??2009-03-10?10:32??IOCP_Server\IOCP_Server\IOCP_Server.vcproj.vspscc
?????文件???????6242??2018-03-24?15:21??IOCP_Server\IOCP_Server\IOCP_Server.vcxproj
?????文件???????3605??2018-03-24?15:21??IOCP_Server\IOCP_Server\IOCP_Server.vcxproj.filters
?????文件????????409??2009-03-10?17:30??IOCP_Server\IOCP_Server\MemoryBlock.cpp
?????文件????????437??2009-03-10?17:31??IOCP_Server\IOCP_Server\MemoryBlock.h
?????文件????????177??2009-03-10?10:32??IOCP_Server\IOCP_Server\mssccprj.scc
?????文件????????398??2009-03-05?14:41??IOCP_Server\IOCP_Server\OperateContext.cpp
?????文件????????792??2009-03-05?14:41??IOCP_Server\IOCP_Server\OperateContext.h
?????文件???????1015??2009-02-18?22:18??IOCP_Server\IOCP_Server\ReadMe.txt
?????文件????????390??2009-02-25?17:00??IOCP_Server\IOCP_Server\resource.h
?????文件????????215??2009-02-18?22:18??IOCP_Server\IOCP_Server\stdafx.cpp
?????文件????????195??2009-02-18?22:18??IOCP_Server\IOCP_Server\stdafx.h
?????文件???????4303??2009-03-10?17:30??IOCP_Server\IOCP_Server\TcpReceiveContext.cpp
?????文件???????1264??2009-03-06?15:24??IOCP_Server\IOCP_Server\TcpReceiveContext.h
?????文件???????4148??2009-03-11?14:27??IOCP_Server\IOCP_Server\TcpSendContext.cpp
?????文件???????1248??2009-03-11?14:21??IOCP_Server\IOCP_Server\TcpSendContext.h
?????文件??????28228??2009-03-11?14:58??IOCP_Server\IOCP_Server\TcpServer.cpp
?????文件???????2716??2009-03-10?14:28??IOCP_Server\IOCP_Server\TcpServer.h
?????文件????????347??2009-03-07?10:51??IOCP_Server\IOCP_Server\TcpSrvException.cpp
?????文件????????645??2009-03-07?10:50??IOCP_Server\IOCP_Server\TcpSrvException.h
?????文件???????4441??2009-03-07?14:45??IOCP_Server\IOCP_Server\UdpContext.cpp
............此處省略20個文件信息
評論
共有 條評論