Delphi-IOCP学习笔记<九>======性能测试和IOCP源码下载<5000个连接数>

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 刚刚的测试,服务端上图 开了5个客户端进行测试。 内存视乎不是很多。客户端的发过来的数据包大小在4096+88字节左右。   测试Echo测试线程 procedure TfrmMain.

刚刚的测试,服务端上图

image

开了5个客户端<每个客户端1000>进行测试。

内存视乎不是很多。客户端的发过来的数据包大小在4096+88字节左右。

 

测试Echo测试线程

procedure TfrmMain.btnEchoTesterClick(Sender: TObject);
var
  lvEchoTester:TEchoTester;
  i:Integer;
begin
  for I := 1 to StrToInt(edtCount.Text) do
  begin
    lvEchoTester := TEchoTester.Create;
    lvEchoTester.TcpClient.Host := '127.0.0.1';
    lvEchoTester.TcpClient.Port := StrToInt(edtPort.Text);
    lvEchoTester.Resume;
    FTesterList.Add(lvEchoTester);
  end;
end;

 

EchoTester线程

unit uEchoTester;

interface

uses
  Classes, IdTCPClient, SysUtils,
  uJSonStreamObject, IdGlobal, superobject,
  Windows;

type
  TEchoTester = class(TThread)
  private
    FTcpClient: TIdTcpClient;
    function createObject: TJSonStreamObject;
    procedure echoWork(pvObject: TJSonStreamObject);
  public
    constructor Create;
    destructor Destroy; override;

    procedure Execute;override;

    property TcpClient: TIdTcpClient read FTcpClient;
  end;

implementation

uses
  ComObj, uJSonStreamCoder;

constructor TEchoTester.Create;
begin
  inherited Create(true);
  FTcpClient := TIdTcpClient.Create(nil);
end;

destructor TEchoTester.Destroy;
begin
  FTcpClient.Free;
  inherited Destroy;
end;

function TEchoTester.createObject: TJSonStreamObject;
var
  lvStream:TMemoryStream;
  lvData:String;
begin
  Result := TJSonStreamObject.Create;
  Result.JSon := SO();
  Result.JSon.I['cmdIndex'] := 1000;   //echo 数据测试
  Result.JSon.S['data'] := '测试发送打包数据';
  Result.JSon.S['key'] := CreateClassID;

  lvStream := TMemoryStream.Create;
  SetLength(lvData, 1024 * 4);
  FillChar(lvData[1], 1024 * 4, Ord('1'));
  lvStream.WriteBuffer(lvData[1], Length(lvData));
  Result.setStream(lvStream);
end;

procedure TEchoTester.echoWork(pvObject: TJSonStreamObject);
var
  lvStream, lvPackStream:TMemoryStream;
  lvData:String;
  lvBuffer:TIdBytes;
  l, j, x:Integer;
begin
  lvPackStream := TMemoryStream.Create;
  try
    TJSonStreamCoder.Encode(pvObject, lvPackStream);

    SetLength(lvBuffer, lvPackStream.Size);
    lvPackStream.Position := 0;
    lvPackStream.ReadBuffer(lvBuffer[0], lvPackStream.Size);
    FTcpClient.Socket.Write(lvBuffer);

    l := FTcpClient.Socket.ReadLongInt(False);
    j := FTcpClient.Socket.ReadLongInt(False);

    //json数据
    SetLength(lvBuffer, l);
    FTcpClient.Socket.ReadBytes(lvBuffer, l, False);
    SetLength(lvData, l);
    ZeroMemory(@lvData[1], l);
    CopyMemory(@lvData[1], @lvBuffer[0], l);
    pvObject.JSon := SO(lvData);
    
    SetLength(lvBuffer, j);
    FTcpClient.Socket.ReadBytes(lvBuffer, j, False);
    pvObject.Stream.Size := 0;
    pvObject.Stream.Write(lvBuffer[0], j);

    SetLength(lvBuffer, pvObject.Stream.Size);
    pvObject.Stream.Position := 0;
    pvObject.Stream.ReadBuffer(lvBuffer[0], pvObject.Stream.Size);

    SetLength(lvBuffer, 0);
  finally
    lvPackStream.Free;
  end;
end;

{ TEchoTester }

procedure TEchoTester.Execute;
var
  lvJSonObject:TJSonStreamObject;
begin
  FTcpClient.Connect;
  lvJSonObject := createObject;
  try
    while (not self.Terminated) do
    begin
      try
        echoWork(lvJSonObject);
      except

      end;
    end; 
    FTcpClient.Disconnect;
  finally
    lvJSonObject.Free;
  end;
end;

end.

 

 

本次优化了代码,解决了内存泄漏的问题。使用了fastMM,如果没有的话,可以注释掉。

 

这一篇应该是学习笔记的最后一篇了。

 

最后还是上传Demo

Delphi-IOCP 性能测试

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
1月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
201 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
31 2
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
63 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
56 3
|
1月前
|
计算机视觉 异构计算
目标检测实战(四):YOLOV4-Tiny 源码训练、测试、验证详细步骤
这篇文章详细介绍了使用YOLOv4-Tiny进行目标检测的实战步骤,包括下载源码和权重文件、配置编译环境、进行简单测试、训练VOC数据集、生成训练文件、准备训练、开始训练以及多GPU训练的步骤。文章还提供了相应的代码示例,帮助读者理解和实践YOLOv4-Tiny模型的训练和测试过程。
134 0
|
3月前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
60 1
|
4月前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
68 3
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高中信息技术课程在线测试系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高中信息技术课程在线测试系统的详细设计和实现(源码+lw+部署文档+讲解等)
37 0
|
4月前
|
测试技术 数据安全/隐私保护 索引
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】(2)
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】
41 0
|
4月前
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】(1)
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】
74 0
下一篇
无影云桌面