luanet性能测试
测试环境 intel-i5 双核 2.53HZ 服务器客户端均在本机运行
测试内容:echo回射,每个包的字节数在20字节内
luanet
连接数 每秒回射数
1 19,000/s
10 12,5000/s
100 12,0000/s
1000 80,000/s
node.js
连接数 每秒回射数
1 27,000/s
10 30,000/s
100 30,000/s
1000 27,000/s
连接数 每秒回射数
1 16,500/s
10 74,000/s
100 75,000/s
1000 51,000/s
从测试结果上看只有在1个连接的情况下luanet不如node.js,当连接数上去之后 luanet每秒的回射数基本都在
node.js的3倍左右.在所有的连接数下都比luvit 高30%以上.
node.js:echo.js
var net = require('net');
var server = net.createServer(function(c) { // 'connection' 监听器
console.log('一个新连接');
c.on('end', function() {
console.log('连接断开');
});
c.on('data',function(data){
c.write(data);
});
c.on('close',function(){
console.log('连接断开');
});
c.on('error',function(e){
});
});
server.listen(8010, function() { // 'listening' 监听器
console.log('服务器监听8010');
});
luvit:echo.lua
local net = require('net')
net.createServer(function (client)
-- Echo everything the client says back to itself
client:pipe(client)
end):listen()
print("TCP echo server listening on port 8010")
luanet:echoserver.lua
local cjson = require "cjson" function on_data(s,data,err)
if not data then
print("a client disconnected")
C.close(s)
else
local tb = cjson.decode(data)
C.send(s,cjson.encode(tb),nil)
end
end function on_newclient(s)
print("on_newclient")
if not C.bind(s,{recvfinish = on_data})then
print("bind error")
C.close(s)
end
end C.listen(IPPROTO_TCP,SOCK_STREAM,net.netaddr_ipv4("127.0.0.1",),
{onaccept=on_newclient})
统一的测试客户端:echoclient.lua
local net = require "lua/netaddr"
local cjson = require "cjson"
local Sche = require "lua/scheduler"
local count = function on_data(s,data,err)
if not data then
print("a client disconnected")
C.close(s)
else
count = count +
local tb = cjson.decode(data)
C.send(s,cjson.encode(tb),nil)
end
end function on_connected(s,remote_addr,err)
print("on_connected")
if s then
if not C.bind(s,{recvfinish = on_data}) then
print("bind error")
C.close(s)
else
print("bind success")
C.send(s,cjson.encode({"hahaha"}),nil)
end
end
end
print("echoclient")
for i=, do
C.connect(IPPROTO_TCP,SOCK_STREAM,net.netaddr_ipv4("127.0.0.1",),
nil,{onconnected = on_connected},)
end local tick = C.GetSysTick()
local now = C.GetSysTick()
while true do
now = C.GetSysTick()
if now - tick >= then
print(count*/(now-tick) .. " " .. now-tick)
tick = now
count =
end
Sche.Sleep()
end
luanet rpc测试:客户端调用服务端的Plus函数,函数只是把客户端提供的两个参数相加并返回
平均每秒rpc调用次数在6,8000左右.而用C+协程实现的版本在70,0000左右.我试着用luajit来运行 同样的测试,非常意外的是性能差了一大截,
只有可怜的2,000次,具体原因还在调查中.
测试代码:server.lua,client.lua
luanet性能测试的更多相关文章
- Ignite性能测试以及对redis的对比
测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...
- 性能测试工具 wrk 安装与使用
介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...
- .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono
.NET Core 超强性能测试组件BenchmarkDotNet 支持Full .NET Framework, .NET Core (RTM), Mono. BenchmarkDotNet支持 C# ...
- C#中实现并发的几种方法的性能测试
C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...
- 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型
关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...
- PostgreSql性能测试
# PostgreSql性能测试 ## 1. 环境+ 版本:9.4.9+ 系统:OS X 10.11.5+ CPU:Core i5 2.7G+ 内存:16G+ 硬盘:256G SSD ## 2. 测试 ...
- Web系统性能测试术语简介
并发用户 并发一般分为两种情况.一种是严格意义上的并发,即所有的用户在同一时刻做同一件事情或者操作.这种操作一般指做同一类型的业务,比如在信用卡审批业务中,一定数目的用户在同一时刻对已经完成的审批业务 ...
- Web前端性能测试-性能测试知多少---深入分析前端站点的性能
针对目前接手的web前端的性能,一时间不知道从什么地方入手,然后经过查找资料,发现其实还是蛮简单的. 前端性能测试对象: HTML.CSS.JS.AJAX等前端技术开发的Web页面 影响用户浏览网页速 ...
- 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试
续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...
随机推荐
- 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码
第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...
- e611. Setting Focus Traversal Keys for the Entire Application
This example changes the focus traversal keys for the entire application. For an example of how to c ...
- C# 委托的同步调用和异步调用
委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. 同步调用的例子: using System; using System.T ...
- asp.net Core EF core ( Entity Framework 7 ) 数据库更新维护
CreateDatabaseIfNotExists等之前的API已经废弃,现在采用的是微软封装好,简化.高效的API,migrations 因为,旧API,要付出高昂的代价,以及局限性 打开VS20 ...
- C#中按模板操作Word —— 如何向Word中插入图片
一.Word对象模型的重叠性分析 本文主要介绍通过书签Bookmark向Word文档中插入图片的方法.在此之前我们先简单讨论下Word对象模型的重叠性.如果你对Word对象模型还不熟悉,请参考本专栏第 ...
- Linux中mkdir和touch命令区别
一.目的 本文将介绍linux下新建文件或文件夹.删除文件或文件夹命令. touch能够新建文件,mkdir用来新建文件夹.rm用来删除文件或文件夹. 本文将选取ubu ...
- 如何解析oracle执行计划
要执行任何SQL语句,Oracle 必须推导出一个“执行计划”.查询的执行计划是 Oracle 将如何实现数据的检索,以满足给定 SQL 语句的描述.它只不过是其中包含的步骤及它们之间关系的顺序树.执 ...
- uva 548 Tree(通过后序,先序重建树+dfs)
难点就是重建树,指针參数的传递今天又看了看.应该是曾经没全然弄懂.昨天真没效率,还是不太专心啊.以后一定得慢慢看.不能急躁,保持寻常心,. 分析: 通过兴许序列和中序序列重建树,用到了结构体指针.以及 ...
- Redis Crackit漏洞利用和防护
注意:本文只是阐述该漏洞的利用方式和如何预防.根据职业道德和<中华人民共和国计算机信息系统安全保护条例>,如果发现的别人的漏洞,千万不要轻易入侵,这个是明确的违法的哦!!! 目前Redis ...
- 有关maven不能加载ojdbc14.jar解决方法
首先下载ojdbc14-10.2.0.4.0.jar这个包,然后在cmd下输入以下 mvn install:install-file -DgroupId=com.oracle -DartifactId ...