0
点赞
收藏
分享

微信扫一扫

.NET C# Socket产品性能测试、性能对比报告(包含SuperSocket、HPSocket.Net、RRQMSocket)

凉夜lrs 2022-01-15 阅读 164
.netc#github

文章目录


一、说明

二、待测试产品、环境

2.1 Socket产品

有其他建议请联系我

  • HPSocket.Net
  • SuperSocket
  • RRQMSocket
项目SuperSocketHPSocket.NetRRQMSocket
GiteeGiteeGiteeGitee
GithubGithubGithubGithub
Gitee DemoDemoDemoDemo
Github DemoDemoDemoDemo

2.2 测试物理机

三、测试

3.1 服务器测试项目配置

3.2 TCP服务器测试参数配置

【SuperSocket】

版本:SuperSocket.Engine 1.6.6.1

AppServer appServer = new AppServer();
var config = new SuperSocket.SocketBase.Config.ServerConfig()
{
    ClearIdleSession = true, //60秒执行一次清理90秒没数据传送的连接
    ClearIdleSessionInterval = 60,
    IdleSessionTimeOut = 90,
    MaxRequestLength = 1024*64, //最大包长度
    Ip = "Any",
    Port = 7789,
    ListenBacklog = 1000,
    MaxConnectionNumber = 10000,
};

appServer.Setup(config);
appServer.Start();

【HPSocket】

版本:HPSocket.Net 5.8.5.5

TcpServer tcpServer = new TcpServer();
tcpServer.MaxConnectionCount = 10000;
tcpServer.SocketListenQueue = 1000;
tcpServer.Port = 7789;
tcpServer.Start();

【RRQMSocket】

版本:RRQMSocket 6.5.0

BytePool.SetBlockSize(1024, 1024 * 1024 * 10);//重新指定内存池最大、最小值分配。
TcpService service = new TcpService();
var config = new TcpServiceConfig();
config.ListenIPHosts = new IPHost[] { new IPHost("127.0.0.1:7789")};
config.MaxCount = 10000;
config.BufferLength = 1024;
//config.BufferLength = 1024*64;//此处设置在测试流量时生效
config.Backlog = 1000;
service.Setup(config);
service.Start();

3.3 测试一

【客户端代码】

static IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7789);
static Socket GetSocket()
{
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    socket.Connect(endPoint);
    return socket;
}

static void Test01()
{
    TimeSpan time = TimeSpan.Zero;
    for (int i = 0; i < 10; i++)
    {
        TimeSpan timeSpan = RRQMCore.Diagnostics.TimeMeasurer.Run(() =>
        {
            List<Socket> sockets = new List<Socket>();
            for (int j = 0; j < 1000; j++)
            {
                sockets.Add(GetSocket());
            }

            foreach (var item in sockets)
            {
                item.Dispose();
            }
        });
        time += timeSpan;
        Console.WriteLine(timeSpan);
    }
    Console.WriteLine($"总用时:{time}");
}

【SuperSocket】
在这里插入图片描述

【HPSocket.Net】

【RRQMSocket】

3.4 测试二

【客户端代码】

static void Test02()
{
    stopwatch = new Stopwatch();
    List<List<Socket>> socketsCollection = new List<List<Socket>>();
    for (int i = 0; i < 10; i++)
    {
        List<Socket> sockets = new List<Socket>();
        for (int j = 0; j < 1000; j++)
        {
            sockets.Add(GetSocket());
        }
        socketsCollection.Add(sockets);
    }

    stopwatch.Start();
    foreach (var item in socketsCollection)
    {
        SocketSend(item);
    }
}

static void SocketSend(List<Socket> sockets)
{
    byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };


    Task.Run(() =>
    {
        TimeSpan timeSpan = RRQMCore.Diagnostics.TimeMeasurer.Run(() =>
          {
              for (int i = 0; i < 1000; i++)
              {
                  try
                  {
                      foreach (var item in sockets)
                      {
                          item.Send(data);
                      }
                  }
                  catch (Exception ex)
                  {
                      Console.WriteLine($"异常退出,{ex.Message}");
                      break;
                  }
              }
          });
        ShowTime(timeSpan);
    });
}

static Stopwatch  stopwatch;
static void ShowTime(TimeSpan timeSpan)
{
    Console.WriteLine($"当前用时:{timeSpan},当前总用时:{stopwatch.Elapsed}");
}

【SuperSocket】
在这里插入图片描述

【HPSocket】

【RRQMSocket】

3.5 测试三

注意:本轮测试中,RRQMSocket需要修改一下BufferLength参数,因为该参数会作为申请内存池的基数,所以为避免内存碎片化,需要将BufferLength调整至641024。*

【SuperSocket】
在这里插入图片描述
在这里插入图片描述
【HPSocket】
在这里插入图片描述

【RRQMSocket】
在这里插入图片描述

四、综合功能及特性

功能SuperSocketHPSocket.NetRRQMSocket
开源
免费商业
.Net 跨平台性正式版不完全具备,Bate版支持依托C++支持基本完全支持
完全跨平台性依托.Net Core跨平台依托C++跨平台依托.Net Core跨平台
依赖程度依赖较严重无依赖仅依赖RRQMCore
应用限制基本无限制受限与不同CPU类型的运行版本,从而不适合UWP转换打包等基本无限制
问题生态链比较完整,遇到问题能很快百度到比较完整,遇到问题能很快百度到新出时间较短,直接搜索比较困难,但是可以直接提Issue解决
是否有视频新手教程无官方教程无官方教程B站有视频
二次开发容易程度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
代码规范度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
文档完整度⭐⭐⭐⭐⭐⭐⭐

五、最后结语

因为我是RRQMSocket的作者,所以难免会对自家产品有诸多赞扬,但是实际上我知道,RRQMSocket还有很长的路要走,好的产品只有经过时间和更多人的考验,才能淘沙出金。所以希望本篇测评,能该您一个建议,也能给RRQMSocket一个机会。下次选择Socket的时候,可以考虑一下RRQMSocket哦。

本次测试源码:RRQMPerformanceTest

举报

相关推荐

0 条评论