• 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)


    近来在考虑一个服务选型,dotnet提供了众多的远程服务形式。在只考虑dotnet到dotnet的情形下,我们可以选择remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)
    其中我考察的重点是前4项的效率差异,而在我的测试项目中他们共用同一个接口定义

    [ServiceContract]
    public interface ICalc
    {
        [OperationContract]
        [WebInvoke(Method = "POST",
                RequestFormat = WebMessageFormat.Json,
                ResponseFormat = WebMessageFormat.Json,
                BodyStyle = WebMessageBodyStyle.Bare,
                UriTemplate = "cmd")]
        CalcInfo Calc(CalcInfo pInfo);
    }

    先来对比传入较为简单的CalcInfo,该类的json只有如下,其中集合Items是空的

    {
        "id": 0,
        "method": "test",
        "para1": 0,
        "para2": 0,
        "result": 999,
        "items": []
    }

    测试从客户端将一个CalcInfo的实例传入服务端,服务端稍加修改Method返回给客户端的过程,主要测试序列化与传输的用时。记录执行10000次请求的总用时

    Remoting用时 3.76s
    WCF(http) 用时 21.92s
    WCF(tcp)用时 5.96s
    WCF(RESTful)用时 2.26s
    asp.net Core(RESTfull)用时 16.59s 

    再来一下比较传输一个较大的CalcInfo,该类的json如下,其中items集合有100个子实例

    {
        "id": 0,
        "method": "test",
        "para1": 0,
        "para2": 0,
        "result": 999,
        "items": [
            {
                "name": "test 1",
                "para1": 1,
                "para2": 0
            },
            {
                "name": "test 2",
                "para1": 2,
                "para2": 0
            }
    //....共有100个子项
        ]
    }

    Remoting用时 12.94s
    WCF(http) 用时  47.38s
    WCF(tcp)用时 9.2s
    WCF(RESTful)用时 10.67s
    asp.net Core(RESTfull)用时 26.08s

    把两个时间放在一起对比一下就很有意思了。小流量时remoting比WCF强,WCF(TCP)莫名的高用时,比json的还要高。在大流量的时候WCF的优势体现出来了,基本符合网上大致的观点。其中WCF(RESTful)让kevin-y印象深刻,几乎与TCP一样的成绩

    小流量

    Remoting用时 3.76s
    WCF(http) 用时 21.92s
    WCF(tcp)用时 5.96s
    WCF(RESTful)用时 2.26s
    asp.net Core(RESTfull)用时 16.59s 

    大流量

    Remoting用时 12.94s
    WCF(http) 用时  47.38s
    WCF(tcp)用时 9.2s
    WCF(RESTful)用时 10.67s
    asp.net Core(RESTfull)用时 26.83s

    测试的源代码来这
    https://files.cnblogs.com/files/kevin-Y/SrvSpeed2.zip

  • 相关阅读:
    关于上传组件
    二分查找的时间复杂度
    commander.js
    执行上下文
    谷歌插件开发
    网站性能
    日记
    <<人间失格>>阅读
    Node.js 应该用在什么地方
    浅谈前后端分离与实践 之 nodejs 中间层服务
  • 原文地址:https://www.cnblogs.com/kevin-Y/p/10020431.html
Copyright © 2020-2023  润新知