iocp封装的引擎测试.可并发8K多

搞网络编程有2年多了。小有心得。前段时间把iocp封装的引擎测试了下。发觉还行。每客户收发1KB/S 可支持8000个.本机测试。

 

  本地测试. 机器配置:双核.2g内存.只能开到8000个连接.机器就承受不了了。 主要是客户端是一客户一线程的模式.开一个客户端程序就开100个线程. 开8000个客户就8000个线程。如果服务端和客户端分别在不同机器运行. 服务端可以达到1w并发连接的. 而且能保证同步客户能收发1KB/S的速度

测试的服务端,客户端程序打包,下地址可下载

http://download.csdn.net/source/3487744

 

2011.8.4 今天有空.于是外网测试了下。依然本机客户连本机服务端。但服务端ip映射到公网上了。。开了400多个就再开客户连接,新客户界面卡了。。想了下.原因应该是我这公司的宽带6M 即128*6的 KB/S的速度就是最大网速了。 400客户 每秒收发1KB 400*2*1=800KB 很容易就把带宽占死了。。无奈。环境就这么残酷。以后找个高速的带宽再测试下 - -!

 

2011.9.18 换了新的工作.在新机器上测试时.发现我的测试程序只能达到3k连接..反复查找原因.先是以为xp连接数限制了.设置了tcpip.sys 1w后.还是只能连3k. 只好去看当时工程编译的代码.原来我设置只允许连接3000个客户连接. = =! 郁闷.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
///////////////////////////////////////////////////////////////// // 初始化Socket bool CIOCPModel::_InitializeListenSocket() { // AcceptEx 和 GetAcceptExSockaddrs 的GUID,用于导出函指针 GUID GuidAcceptEx = WSAID_ACCEPTEX; GUID GuidGetAcceptExSockAddrs = WSAID_GETACCEPTEXSOCKADDRS; // 服务器地址信息,用于绑定Socket struct sockaddr_in ServerAddress; // 生成用于监听的Socket的信息 m_pListenContext = new PER_SOCKET_CONTEXT; // 需要使用重叠IO,必须得使用WSASocket来建立Socket,才可以支持重叠IO操作 m_pListenContext->m_Socket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); if (INVALID_SOCKET == m_pListenContext->m_Socket) { this->_ShowMessage("初始化Socket失败,错误代码: %d.\n", WSAGetLastError()); return false; } else { TRACE("WSASocket() 完成.\n"); } // 将Listen Socket绑定至完成端口中 if( NULL== CreateIoCompletionPort( (HANDLE)m_pListenContext->m_Socket, m_hIOCompletionPort,(DWORD)m_pListenContext, 0)) { this->_ShowMessage("绑定 Listen Socket至完成端口失败!错误代码: %d/n", WSAGetLastError()); RELEASE_SOCKET( m_pListenContext->m_Socket ); return false; } else { TRACE("Listen Socket绑定完成端口 完成.\n"); } // 填充地址信息 ZeroMemory((char *)&ServerAddress, sizeof(ServerAddress)); ServerAddress.sin_family = AF_INET; // 这里可以绑定任何可用的IP地址,或者绑定一个指定的IP地址 //ServerAddress.sin_addr.s_addr = htonl(INADDR_ANY); ServerAddress.sin_addr.s_addr = inet_addr(m_strIP.GetString()); ServerAddress.sin_port = htons(m_nPort); // 绑定地址和端口 if (SOCKET_ERROR == bind(m_pListenContext->m_Socket, (struct sockaddr *) &ServerAddress, sizeof(ServerAddress))) { this->_ShowMessage("bind()函执行错误.\n"); return false; } else { TRACE("bind() 完成.\n"); } // 开始进行监听 if (SOCKET_ERROR == listen(m_pListenContext->m_Socket,SOMAXCONN)) { this->_ShowMessage("Listen()函执行出现错误.\n"); return false; } else { TRACE("Listen() 完成.\n"); } // 使用AcceptEx函,因为这个是属于WinSock2规范之外的微软另外提供的扩展函 // 所以需要额外获取一下函的指针, // 获取AcceptEx函指针 DWORD dwBytes = 0; if(SOCKET_ERROR == WSAIoctl

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值