zoukankan      html  css  js  c++  java
  • .NET提供的Socket吞吐能力

       MS给.NET的socket异步提供了IOCP的支持,对于IOCP这个模型来说相信做过网络应用的朋友都清楚他的性能。但经过.NET的包装后他的性能又是怎样呢?以下是.NET Socket的吞吐能力测试结果。测试服务端的配置为Core E4300 1.8g 2g内存win2003sp2,配置似乎有点旧,但这样更容易体现.NET Socket的性能.

    单一对象应答

    客户端发起一个请求,服务器应答后客户端再进行下一次请求.

    请求对象

    1
    2
    3
    4
    public class Get : IMessage
    {
        public string ID;
    }

    应答对象 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    GetResponse response = new GetResponse();
    response.User = new User();
    response.User.Name = "henryfan";
    response.User.EMail = "henryfan@msn.com";
    response.User.City = "guangzhou";
    response.User.Counrty = "china";
    response.User.ID = 2324;
    response.User.Age = 45;
    response.User.BirthDay = 45454545;
    response.User.Enabled = true;
    response.User.FData = 4454.45f;
    response.User.DData = 34343242.242;

    不同连接情况下的测试结果

    列表对象应答

    客户端发起一个请求,服务器应答后客户端再进行下一次请求. 

    请求对象

    1
    2
    3
    class Request : IMessage
    {
    }

    应答对象 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Response response = new Response();
    for (int i = 0; i < 5; i++)
    {
        Order order = new Order();
        order.OrderID = 10248;
        order.CustomerID = "WILMK";
        order.EmployeeID = 5;
        order.OrderDate = 629720352000000000;
        order.RequiredDate = 629744544000000000;
        order.ShipAddress = "59 rue de l'Abbaye";
        order.ShipCity = "Reims";
        order.ShipCountry = "France";
        order.ShipName = "Vins et alcools Chevalier";
        order.ShipPostalCode = "51100";
        order.ShipRegion = "RJ";
        response.Orders.Add(order);
    }

    测试结果

    带宽受限,因此只能测试1000连接

    高连接并发

    客户端每隔一秒请求发出一个请求

    请求对象

    1
    2
    3
    Register register = new Register();
    register.UserName = "henryfan";
    register.EMail = "henryfan@msn.com";

    应答对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    User user= new User();
    user.Name = "henryfan";
    user.EMail = "henryfan@msn.com";
    user.City = "guangzhou";
    user.Counrty = "china";
    user.ID = 2324;
    user.Age = 45;
    user.BirthDay = 45454545;
    user.Enabled = true;
    user.FData = 4454.45f;
    user.DData = 34343242.242;

    不同连接测试结果

        从以上得到的数据来看,.NET提供的Socket吞吐能力还是很不错的,比较保守的计算在5年前的普通家用PC满负载的情况最低也可以处理5W的send+5w的receive的IO操作。为什么说是保守呢,因为以上测试所包括的并不仅仅是Socket吞吐,还有协议的分析对象的序列化等等工作。从后面的测试情况看,连接数并不是影响性能的主要因素,可以说存在的影响非常少,所以在设计的时候并没有必要注意在连接数上;在一些交流过程很多人第一时间关心这个在此提醒一下。看完这个结果相信对.NET Socket吞吐能力不了解的朋友应该大体上的了解,需要做这方面应用的朋友好好地利用它的,它的性能真的不错.

    专注于可靠、高性能的Socket TCP通讯组件
  • 相关阅读:
    引用&符号详解
    简单计算器
    while循环输出的表格
    设置和获取变量类型
    位运算符
    MySQL基础(一)SQL基础
    python 21天网络爬虫使用 代理
    Spark入门(一)
    Apache spark2.1.0编译hadoop-2.6-cdh5.11.2的对应版本
    Java 多线程
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2490116.html
Copyright © 2011-2022 走看看