zoukankan      html  css  js  c++  java
  • .net socket在win2008下的吞吐性能报告

    对于.net socket的性能问题,似乎MS也没有象WCF一样出个详细的报告,在很多人的使用情况来看性能方面并不理想。如果你比较关注这方面的东西,那这个测试的报告应该可以给你帮助对.net socket性能方面有个更多的了解。如果你担心.net socket的性能是否满足游戏服务端或应用网关的需要,以下测试结果相信也可以给到你一个明确的答案。

    测试简述

    为了更接近实际应用情况,测试流程 主要如下:数据接收->协议分析->数据反序列化成协议消息对象->消息对象分发->构建应答对象->序列化成协议数据 ->发送;而整个测试流程只缺少逻辑处理,不同应用逻辑处理存在差异,导致损耗也不一样所以并没有归纳到测试里去.测试用例分别有:1)高连接高并 发,2)低连接密集并发,3)状态广播等三种情况.

    测试硬件如下:

    • 服务器采用E1230 V2版的至强CPU,8G内存和WIN2008R2的操作系统
    • 测试客户端则使用了三台配置低的台式机,2G内存和WIN2003操作系统

    由于网络环境和测试客户端配置问题,并没进行极端的压力模拟

    测试1

    这个测试主要有三种情况,分别是10000连接,20000连接,30000连接;每个连接每秒向服务器发送一个请求,服务器接收请求后进行处理分发并进行应答

    发请请求内容:

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

    应用答内容:

        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;

    三种情况的CPU,内存,网络等资源状况:

    测试2

    这个测试主要是针对连接相对比较少,但交互量比较大的应用如游戏.测试分别是1000,2000和3000连接三种情况,每个连接向服务端发出一个请求,服务端接收处理后进行应答,客户端得到应答后马上进入一下次请求.
    发送请求内容:
        Get get = new Get();
    应答内容:
        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;
    三种情况的CPU,内存,网络等资源状况:


    测试3

    连接广播测试,这种在游戏场景中比较多,就是一个玩家状态变化后通知相邻的玩家,这种情况的数据交互非常大;以下测试是针对500连接的状态广播,连接每秒转发两次状态变更,服务器把变更信息转发给其他499个连接,其消息转发总量是每秒50W条.

    转发信息如下:

        Po postion = new Po();
        Point point = client.GetPoint();
        postion.Type = client.GetClientType();
        postion.X = Convert.ToInt16(point.X);
        postion.Y = Convert.ToInt16(point.Y);

    CPU,内存,网络等资源状况:

    以上测试并没有通过1比1的IO来达到50W的消息转发,从测试数据来看发送50W消息所使用发送IO大概是1W多来进行处理,因为同时多个消息发向一个连接,可以把消息进行合并处理来缓解IO所带的压力.


    访问Beetlex的Github
  • 相关阅读:
    Mockito一个方法的实例
    LIst与ArrayList区别
    mockito入门学习
    eclipse中调整字体大小和改变背景颜色
    常用sql语句
    eclipse导入代码和重新编译
    windows下登录linux的常用工具SecureCRT和常用命令
    junit4
    接口测试
    java环境
  • 原文地址:https://www.cnblogs.com/smark/p/2715059.html
Copyright © 2011-2022 走看看