• .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
  • 相关阅读:
    Atitit attilax要工作研究的要素 纪要 方案 趋势 方向 概念 理论
    Atitit 常见每日流程日程日常工作.docx v7 r8f
    Atitit it 互联网 软件牛人的博客列表
    Atitit 信息链(Information Chain)的概念理解 attilax总结
    Atitit 知识点的体系化 框架与方法 如何了解 看待xxx
    Atitit 聚合搜索多个微博 attilax总结
    Atitit 企业知识管理PKM与PIM
    Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
    Atitit 项目管理软件 在线服务 attilax总结 1. 项目管理协作的历史 1 1.1. Worktile 406k 1 1.2. Teambition  584k in baidu
    Atitit.每周末总结 于每周一计划日程表 流程表 v8 import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  • 原文地址:https://www.cnblogs.com/smark/p/2715059.html
Copyright © 2020-2023  润新知