欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-28 13:09:39
近来在考虑一个服务选型,dotnet提供了众多的远程服务形式。在只考虑dotnet到dotnet的情形下,我们可以选择remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)其中我考察的重点是前4项的效率差异,而在我的测试项目中他们 ......

近来在考虑一个服务选型,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(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)

把两个时间放在一起对比一下就很有意思了。小流量时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