C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力

目前的版本中,通过修改Windows下FD_SETSIZE这个宏定义,来打破select只能处理64个socket收发限制。因此,开通了1000个客户端去连接服务端以测试性能。通过在资源管理器中可以查看,每秒达到150M左右的收发网络数据能力(这个数值与计算机硬件设备和操作系统的限制相关)。
C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力_第1张图片
C++ 11中引入了精准的跨平台的计时器,简单的实现如下:
这个是一个C++11新引入的计时器,通过cpu时间片的底层调入精准计时,且可以跨平台使用。

#ifndef CELLTimestamp_HPP_
#define CELLTimestamp_HPP_

#include
using namespace std::chrono;
class CELLTimestamp
{
public:
	CELLTimestamp()
	{
		update();
	}
	~CELLTimestamp()
	{

	}
	double getElapsedSecond()
	{
		return this->getElapsedTimeInMicroSec() * 0.001 * 0.001;
	}
	// 毫秒
	long long getElapsedTimeInMilliSec() 
	{
		return this->getElapsedTimeInMicroSec() * 0.001;
	}
	//获取微秒
	long long getElapsedTimeInMicroSec()
	{
		return duration_cast(high_resolution_clock::now() - _begin).count();
	}
	void update()
	{
		_begin = high_resolution_clock::now();
	}

protected:
	time_point  _begin;
};
#endif

客户端开10个socket连接时,达到每秒6000多个数据包(每个数据包1000K字节)。
C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力_第2张图片100个socket连接到服务端时,依然是每秒6000个数据包(每个数据包1000K字节)。可能是受到我这台测试电脑的网卡和系统的限制。
C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力_第3张图片


换到了windows10专业版系统中重新进行测试
当客户端socket开启100个连接的时候,网络数据收发达到每秒6W个,网络字节传输量达到1Gb每秒,但不是特别的稳定。
C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力_第4张图片
C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力_第5张图片

同样的,当客户端连接数达到500个,网络数据收发达到每秒6W个,网络字节传输量达到1Gb每秒,稳定性更差了。这也是Select网络模型的缺点,因此需要通过引入多线程改进业务,或使用epoll等网络模型,但select终归是基础。
C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力_第6张图片
C++ Socket网络编程1.6版本 添加高精度计时器测量处理能力_第7张图片

你可能感兴趣的:(Socket网络编程)