请问 UDP 的完成端口 是不是 每个工作者线程对应一个socket就可以了。
第一个工作者线程的流程就是
workThread()
{
WSARecvfrom(m_sock[0],…………);
while(1)
{
GetQueuedCompletionStatus(…………);
if(发送数据)
{
发送成功了。下面接着等待读取。
WSARecvfrom(m_sock[0],…………);
}
else if(收到数据)
{
根据取回的内容,得到客户端地址,然后
WSASend(…………);
}
}
}主线程就是简单的,创建N个工作者线程,然后建立N个socket 即 m_sock[N]这样做对吗?功能是每来一个客户数据,服务器就根据得到的数据返回响应的结果给客户端。 这样做效率如何?是不是应该多投递几个WSARecvfrom????
第一个工作者线程的流程就是
workThread()
{
WSARecvfrom(m_sock[0],…………);
while(1)
{
GetQueuedCompletionStatus(…………);
if(发送数据)
{
发送成功了。下面接着等待读取。
WSARecvfrom(m_sock[0],…………);
}
else if(收到数据)
{
根据取回的内容,得到客户端地址,然后
WSASend(…………);
}
}
}主线程就是简单的,创建N个工作者线程,然后建立N个socket 即 m_sock[N]这样做对吗?功能是每来一个客户数据,服务器就根据得到的数据返回响应的结果给客户端。 这样做效率如何?是不是应该多投递几个WSARecvfrom????
接收完后,立即WSARecvfrom即可的
而不是 每个工作者线程对应一个socket
switch(pPerIO->OperatorType)
{
case IO_RECV: //完成一个接收请求
{
//接收到的数据处理
//继续抛出接收命令
::WSARecv(...);
}
break;
case IO_SEND: //完成一个发送请求
;
break;
case IO_END: //完成一个结束请求
;
break;
default :
;
}