在有些场中存在着大量的消息广播转发,为了了解.net socket tcp在这方面的性能表现,所以做了一个比较极端信息广播转发强度测试.测试场景是以400个连接信息相互广播为测试用例就是当其中一个连接发送消息到服务端就会转发到其他连接上,测试情况分别是每个连接每秒广播2,5和10次,其服务器每秒的信息转发量分别320000,800000和1600000.

测试的硬件分别是一台win2008服务器,1台WIN2003和两个vm win2003.测试交互的消息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Po
: IMessage
    {
        public int ID;
        public short X;
        public short Y;
        public short Type;
        public void Load(BufferReader
reader)
        {
            ID
= reader.ReadInt32();
            X
= reader.ReadInt16();
            Y
= reader.ReadInt16();
            Type
= reader.ReadInt16();
        }
        public void Save(BufferWriter
writer)
        {
            writer.Write(ID);
            writer.Write(X);
            writer.Write(Y);
            writer.Write(Type);
        }
    }

以上消息写入流的大小是18个byte,由于在之前的测试中使用的是100mb交换,所以大概跑到50w左右的消息量基本就跑满了,最近刚换上了1000mb交换所以重新进一个密集交互测试.

每秒发两次的结果

每秒发5次的结果

每秒发10次的结果

总结

从最终的测试结果来看即使每秒转发到到1600000消息,cpu和内在的使用率都还是很低的,从测试程序的日志输出来看每秒大概使用了27000个IO来处理这1百多W的消息转发,简单地算一下大概每个IO处理了50多个消息.由于IO资源的缺少在面对这情况下也必须这样做,即使千兆的交换机其pps也只通达到1488000因此到系统软件层面就更不用谈了.虽然使用了合并处理转发数据,但延时控制还是很理想即使服务器的转发量达到每秒1600000消息,但每个消息到达client还是可以控制到20ms内.

从服务器的资源来看其实还可以做更极端的压力测试,可是client不给力因为整个测试过程包括协议分析,对象写入流和流解释成对象,由于服务端一个对象分发到N个连接也只是序列化一次,所以损耗并不高.但对于client就不一样,每次接收一个消息都需反序列成对象.对于配置不高的client来说每秒要处理接近百W的消息分析和反序列完全应付不过来,如果以后有更好的机器会再详细测一次.

相信看完这个测试的朋友应用对.net socket有更深入的了解,同样.net socket在iocp的支持下其性能也是很出色的.

Socket Tcp高密集信息广播转发强度测试的更多相关文章

  1. .NET Socket TCP 50W在线连接交互测试

    在平常的交流中经常有人问.net socket能支持多少在线?和C++或linux下比起来应该差很远吧?其实产生这样问题的主要原因是.net很少人去做这方面的测试,而在linux下则经常听到什么100 ...

  2. ActionScript简单实现Socket Tcp应用协议分析器

    转自..smark http://www.cnblogs.com/smark/archive/2012/05/15/2501507.html ActionScript简单实现Socket Tcp应用协 ...

  3. 27.Socket,TCP,UDP,HTTP基本通信原理

    Socket,TCP,UDP,HTTP基本通信原理(摘自百度): TCP.UDP,HTTP 底层通信都是通过 socket 套接字实现 网络上不同的计算机,也可以通信,那么就得使用网络套接字(sock ...

  4. 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现

    设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...

  5. linux tcp 高并发最大连接数

    Linux下高并发socket最大连接数所受的限制问题 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统 ...

  6. 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载

    一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.N ...

  7. 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载

    一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用 ...

  8. 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP

    [源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...

  9. 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

    原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  10. 基于.NET Socket Tcp的发布-订阅框架

    基于.NET Socket Tcp的发布-订阅框架 一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已 ...

随机推荐

  1. 5个必知的高级SQL函数

    5个必知的高级SQL函数 SQL是关系数据库管理的标准语言,用于与数据库通信.它广泛用于存储.检索和操作数据库中存储的数据.SQL不区分大小写.用户可以访问存储在关系数据库管理系统中的数据.SQL允许 ...

  2. 消息队列的对比测试与RocketMQ使用扩展

    消息队列的对比测试与RocketMQ使用扩展     本文的主要内容包括以下几个方面: 原有的消息技术选型 RocketMQ与kafka 测试对比 如何构建自己的消息队列服务 RocketMQ扩展改造 ...

  3. ARC119F 题解

    前言 ARC119F 好厉害,是没见过的自动机 DP. 正文 [1] 分析 主要分析一下为什么这么写. [2] 状态设计 [3] 自动机状态转移 感觉状态设计中最难的就是如何处理带 \(O\) 的. ...

  4. JS常见的API扩展形式(prototype、jquery、vue插件封装)以及怎样设计出易扩展的表单验证功能?

    常见的API扩展形式 prototype 比如我现在有一个需求,给定一个字符串,给方法传递一个参数为数字类型来确定当前字符串重复次数,例如: 'abc'.repeatStringNumTimes(3) ...

  5. 【渗透测试】ATT&CK靶场一,phpmyadmin,域渗透,内网横向移动攻略

    前言 VulnStack,作为红日安全团队匠心打造的知识平台,其独特优势在于全面模拟了国内企业的实际业务场景,涵盖了CMS.漏洞管理及域管理等核心要素.这一设计理念源于红日安全团队对ATT&C ...

  6. 系统编程-进程-wait、waitpid和WIFEXITED系列宏 超级详解

    1.  wait.waitpid 函数简介 补充:对于waitpid,如果返回值为0,表示指定去等待的子进程尚未结束. 该系列宏的使用方法展示: PART1 实验思路: 使用wait系统调用让父进程给 ...

  7. .Net 反射和特性

    学习:.net 反射简单介绍 - WebEnh - 博客园 (cnblogs.com) 反射就是通过反射程序集从而获取相关信息 十月的韩流 使用了特性就必定会使用反射 var res = obj.Ge ...

  8. 激活windows教程

    新建bat文件 [批处理文件:后缀是 bat ] 输入代码: slmgr/skms kms.03k.org slmgr/ato 然后以管理员运行 :

  9. 为重复使用的HttpClient对象动态修改Timeout

    最近博客园被**了, 赶紧水一文支持一下博客园,加油! 问题现象 当HttpClient被使用过之后, 在修改它们的属性会抛出错误This instance has already started o ...

  10. 倒计时 3 天!10.23 相约杭州,云原生 Meetup 等你来!

    云原生技术交流 Meetup 杭州站开启,快来报名吧! 活动简介 随着云原生技术的普及,整个市场已经变成了节奏非常快的软件驱动型市场,使用云原生技术栈来迭代发布应用已经成为常态,但是如何更好的应用云原 ...