Socket-Vs-WebSocket-TestTool
项目地址 : https://github.com/kelin-xycs/Socket-Vs-WebSocket-TestTool
Socket-Vs-WebSocket-TestTool
一个用 C# 写的 Socket 和 WebSocket 性能测试工具
这个项目不是计划内的 。 我要 呵呵 了 。 因为 QQ 群里有网友提到 “WebSocket 的效率比 Socket 低” , 所以就想看一下实际情况到底怎么样 。
解决方案 里 包含 4 个项目, SocketTest , SocketTestTool , WebSocketTest , WebSocketTestTool 。
SocketTest : Socket 测试的服务器端
SocketTestTool : Socket 并发测试工具
WebSocket : WebSocket 测试的服务器端
WebSocketTestTool : WebSocket 并发测试工具
测试原理 : 测试工具发送 2 Byte 的数据 “aa” 到 服务器端 , 服务器端收到数据后回发这 2 Byte 的数据给测试工具,测试工具接收到回发数据算一次请求完成 。 本次请求完成后才会发出下一次请求 。
测试结果 :
Socket : 每秒请求数最高可达到 25000 , CPU 占用率 : 测试工具 15% , 服务器端 22% , System进程 27%
WebSocket : 每秒请求数最高可达 7500 - 8000 , CPU 占用率 : 测试工具 30% , 服务器端 48% , System进程 7%
注 : System 进程 应该就是 Win Socket 工作线程所在的进程 。
从这组测试数据看起来 , WebSocket 的效率大概是 Socket 的 1/3 - 1/4 之间 。
有一个现象值得注意 : 在测试中 , Socket 组 的 CPU 占用率普遍低于 WebSocket 组 , 还有一点 , Socket 测试中 CPU 占用率最高的是 System 进程 , 而 WebSocket 测试中 CPU 占用率 最高的是 服务器端 进程 , 并且 System 进程的 CPU 占用率 最低 和 很低 。
好的 , 上面是测试结果 。
下面对 测试工具 和 服务器端 程序作一些说明 :
WebSocketTest.exe 需要 “以管理员身份运行” , 不然会报 “拒绝访问” 的异常 。
测试工具 界面上有一个 文本框 “连接数” , 默认值 是 800 。
还有一个 文本框 “线程数” , 这个文本框的默认值是 4 , “线程数” 的 意思是 用于发送测试请求 的 线程数 ,通常设定为和 CPU 的 核数 相同即可 (可以把 虚拟线程(超线程) 算进去) 。 发送请求的线程数太多的话 , 会占用过多的 CPU 资源 , 同时 测试表现 会下降 。
还有一个 文本框 “发送内容” , 默认值是 “aa” , 目前 服务器端 的 程序 写死只接收 2 Byte 的数据 , 如果要发送更长的内容 , 服务器端 程序 需要相应的作一些修改 , 不然超出 2 Byte 的数据会在 Socket 和 WebSocket 的 缓冲区 里 堆积 起来 。
这次还发现了一些有趣的东西 :
async await 有些鸡肋 。 Thread , Monitor , Task , Task.Wait() 可以很好的完成 异步工作 。 async await 增加了 语言 的 复杂性 和 目标代码 的 复杂性 。 希望通过 async 一个 关键字 就能使一个 普通方法 变成 异步方法 , 这个想法很好 。 通过 await 来完成 等待异步调用 的 设计也很好 。 但 async 和 await 两者 应该可以单独使用 , 彼此之间不必有关联 。 这样的话 , 用 async 关键字就可以很容易的使一个方法变成 异步方法 , 而用 await 也可以很方便的 等待 异步方法 的 调用 。 两者之间不必有什么关联 。 实际上 , async await 要解决的 ,或者说 适合解决 的 一个场景 是 AJAX 里 充满异步调用 的 场景 。 在 AJAX 里 , 几乎每个事件都有 异步调用 , 每个 事件函数 都 对应 回调函数 , 只要有和服务器的交互的话 。 async await 可以来解决这样的场景 。 让 AJAX 事件函数里访问服务器的 WebApi 和 后端代码里访问 数据库 一样 , 同步执行 , 顺序执行 。 但 async await 之间不必有关联 。 实际上 , async 方法里 必须 有 await 正是 async await 的 败笔 所在 。
从这个项目中 , 我们再次体会到 , 测试 是 一个 专业 , 是 和 开发 不可分割 的 一部分 , 和 开发 一起组成 软件生产力 。 测试 是 DevOps 的 主干力量 。
Socket-Vs-WebSocket-TestTool的更多相关文章
- C# Socket 实现WebSocket服务器端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- TCP UDP socket http webSocket 之间的关系
---恢复内容开始--- OSI&TCP/IP模型 要弄清tcp udp socket http websocket之间的关系,首先要知道经典的OSI七层模型,与之对应的是TCP/IP的四层模 ...
- Socket与WebSocket以及http与https重新总结
Socket与WebSocket以及http与https重新总结 一.Socket 网络中的Socket是一个抽象的接口 ,而是为了方便使用TCP或UDP而抽象出来的一层 ,可以理解为网络中连接的两端 ...
- Http、Socket、WebSocket之间联系与区别
WebSocket和Socket区别 可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系. HTTP 协议有一个缺陷:通信只 ...
- Hosting socket.io WebSocket apps in IIS using iisnode
In this post I explain how to configure a socket.io node.js application to use of WebSockets when ho ...
- PHP Socket实现websocket(一)基本函数介绍
WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 一开始的握手需要借助HTTP请求完成. WebSocket是基于TCP来实 ...
- Socket 与 WebSocket
本文转载自:http://zengrong.net/post/2199.htm 1. 概述 选择了 WebSocket 技术之后,不可避免的,我要将它和其他协议以及技术做一下比较.最常见的,就是需要比 ...
- 9、socket.io,websocket 前后端实时通信,(聊天室的实现)
websocket 一种通信协议 ajax/jsonp 单工通信 websocket 全双工通信 性能高 速度快 2种方式: 1.前端的websocket 2.后端的 socket.io 一.后端so ...
- socket.io websocket
不能不知道的事: 在Http协议中,客户端向服务器端发送请求,服务器端收到请求再进行回应,整个过程中,服务器端是被动方,客户端是主动方: websoket是H5的一种基于TCP的新通信协议,它与Htt ...
- socket、WebSocket
WebSocket 协议本质上是一个基于TCP的协议,它由通信协议和编程API组成,WebSocket能够在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器实时通信能力. socket本质 ...
随机推荐
- ccf交通规划
一.试题 问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统. 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改 ...
- Wannafly挑战赛20-A,B
A-链接:https://www.nowcoder.com/acm/contest/133/A来源:牛客网 题目描述 现在有一棵被Samsara-Karma染了k种颜色的树,每种颜色有着不同的价值 A ...
- HDOJ1008
#include "iostream" using namespace std; int main() { ) { int n; cin >> n; ) break; ...
- 二、为什么要用MapReduce
一.为什么要用MapReduce? 首先MapReduce被广泛应用于日志分析.海量数据的排序.在海量数据中查找特定模式等 场景.而且它非常简单,易于实现且扩展性强.可以通过它编写同事在多台主机上运行 ...
- JavaScript学习总结(六)——JavaScript判断数据类型总结
最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型 1.数值型(Number):包括整数.浮 ...
- Snagit安装步骤
Snagit安装步骤 1解压文件 2运行文件下一步下一步 3拷贝汉化文件到安装目录 安装目录 D:\home\user\TechSmith\snagit 成功
- 013PHP文件处理——filemtime filectime fileatime date_default_timezone_set touch
<?php /** * filemtime filectime fileatime date_default_timezone_set touch */ /*filemtime:获取文件的修改时 ...
- POJ 1847 dijstra算法
POJ 无限循环CE中.感觉是读题难.然后就可以建图上模板了. 附个人代码: #include<stdio.h>#include<string.h>#include<io ...
- KMP 求next数组
一直没理解.看这个倒是看懂了.但是博主代码好像有点问题吖.测试并不正确.思想还是没错的. 转载自:http://www.tuicool.com/articles/yayeIbe
- ZOJ 3822 Domination 概率dp 难度:0
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...