如果程序采用c/s结构,他们之间采用UDP协议进行通讯。有两种方案来处理他们之间的交互。
方案一,如果当server端接收到来自客户端的请求,那么就建立一个
线程来处理这个客户的请求。方案二,server端就是一个线程,但是把所有的客户端的请求数据,都放在一个
队列中,按照先来先服务的算法依次处理。同时将处理完的数据也放在对列中等待发送。那么现在的问题是,在方案一中,如果同时有1000个客户端的请求,而且每一个请求处理的时间1-2秒,我想知道server端的承受能力。会不会因为客户端的不断请求而不断的建立,销毁线程而变得,压力太大??各位大侠你们的程序中,最多开过多少个线程,效率如何??在方案二中,我认为最大的问题是实时性的问题,也就是可能出现较大的延迟。还有这种方案中还可能出现什么问题???谢谢指点和讨论??
方案一,如果当server端接收到来自客户端的请求,那么就建立一个
线程来处理这个客户的请求。方案二,server端就是一个线程,但是把所有的客户端的请求数据,都放在一个
队列中,按照先来先服务的算法依次处理。同时将处理完的数据也放在对列中等待发送。那么现在的问题是,在方案一中,如果同时有1000个客户端的请求,而且每一个请求处理的时间1-2秒,我想知道server端的承受能力。会不会因为客户端的不断请求而不断的建立,销毁线程而变得,压力太大??各位大侠你们的程序中,最多开过多少个线程,效率如何??在方案二中,我认为最大的问题是实时性的问题,也就是可能出现较大的延迟。还有这种方案中还可能出现什么问题???谢谢指点和讨论??
如果大家要回答的话,请到
http://expert.csdn.net/Expert/topic/2950/2950600.xml?temp=.8976557
谢谢!
象aparch就是。
这里有个例子:
http://www.codeproject.com/threads/diggerthreadpool.asp?target=threadpool
BOOL CServerSocket::ProcessEvent(int group,int Index)
{
WSAEnumNetworkEvents (ConnectedSocket[group][Index].conSocket ,NULL,&m_NetworkEvents);
WSAResetEvent(m_hEvent[group][Index]);
if(m_NetworkEvents.lNetworkEvents == FD_CLOSE)
{
WSAEventSelect(ConnectedSocket[group][Index].conSocket,m_hEvent[group][Index],0);
OnClose(&ConnectedSocket[group][Index]);
}else
if(m_NetworkEvents.lNetworkEvents == FD_READ)
{
OnRead(&ConnectedSocket[group][Index]);
}
return TRUE;
}
这是部分代码
{
DWORD dwEventIndex;
CServerSocket *Socket=(CServerSocket *)lParam;
WSANETWORKEVENTS NetworkEvents; while(!Socket->m_bExit)
{
dwEventIndex = WaitForSingleObject(Socket->m_hEventListen,
WSA_INFINITE); WSAEnumNetworkEvents (Socket->m_ListenSocket ,
NULL,&NetworkEvents); WSAResetEvent(Socket->m_hEventListen); if(NetworkEvents.lNetworkEvents == FD_ACCEPT && !Socket->m_bExit)
{
Socket->OnAccept();
}
Sleep(0);
}
TRACE("ListenThread exit\n");
return 0;
}
这是事件模式,我最近完成了,重叠模式但总的构架没变。
完成端口正在写