测试环境 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

luvit

连接数    每秒回射数
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性能测试的更多相关文章

  1. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  2. 性能测试工具 wrk 安装与使用

    介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...

  3. .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono

    .NET Core 超强性能测试组件BenchmarkDotNet 支持Full .NET Framework, .NET Core (RTM), Mono. BenchmarkDotNet支持 C# ...

  4. C#中实现并发的几种方法的性能测试

    C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...

  5. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  6. PostgreSql性能测试

    # PostgreSql性能测试 ## 1. 环境+ 版本:9.4.9+ 系统:OS X 10.11.5+ CPU:Core i5 2.7G+ 内存:16G+ 硬盘:256G SSD ## 2. 测试 ...

  7. Web系统性能测试术语简介

    并发用户 并发一般分为两种情况.一种是严格意义上的并发,即所有的用户在同一时刻做同一件事情或者操作.这种操作一般指做同一类型的业务,比如在信用卡审批业务中,一定数目的用户在同一时刻对已经完成的审批业务 ...

  8. Web前端性能测试-性能测试知多少---深入分析前端站点的性能

    针对目前接手的web前端的性能,一时间不知道从什么地方入手,然后经过查找资料,发现其实还是蛮简单的. 前端性能测试对象: HTML.CSS.JS.AJAX等前端技术开发的Web页面 影响用户浏览网页速 ...

  9. 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试

    续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...

随机推荐

  1. Linux-HA实战(3)— 基于Pacemaker搭建TFS Nameserver HA

    上篇文章简单介绍了下基于Heartbeat的虚拟IP配置,个人觉得简单易用已经能够应付大部分场景了.但是既然花时间研究HA,如果仅限于一个虚拟IP飘来飘去未免有点糊弄任务了,因此这篇文章打算介绍下基于 ...

  2. Python 判断文件是否存在的三种方法

    通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...

  3. Storm概念、原理详解及其应用(一)BaseStorm

    本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数“wordcount” ...

  4. T4生成实体,单张表和多张表

    # 使用说明 . 把T4目录放在项目的根目录 . 配置连接字符串,在tt文件的最底部 . generateAllEntity.tt生成全部的实体类 . generateSingleEntityByNa ...

  5. Vue 404页面处理

    问题原因: 刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径 解决方案: 第一步:后端配置 Apache <IfModule mod_rewrite.c& ...

  6. MYSQL类型与JAVA类型对应表

    MYSQL类型与JAVA类型对应表: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR ...

  7. CentOS 7下彻底卸载MySQL数据库

    转载: https://zhangzifan.com/centos-7-remove-mysql.html

  8. VCL 中的 Windows API 函数(5): AlphaBlend

    AlphaBlend 是指定图像混合透明的函数, 在 Graphics.GraphUtil.RibbonStyleActnCtrls 单元用到. 下面的测试是把一张图片显示在窗体, 并可以调整透明度. ...

  9. CorelDRAW中如何再制对象详解

    再制对象指的是快捷地将对象按一定的方式复制为多个对象,此种复制是复制的复制,再制不仅可以节省复制的时间,再制间距还可以保证复制效果.本教程将详解如何在CorelDRAW软件中再制对象. CorelDR ...

  10. Tensorflow物体检测(Object Detection)API的使用

    Tensorflow在更新1.2版本之后多了很多新功能,其中放出了很多用tf框架写的深度网络结构(看这里),大大降低了吾等调包侠的开发难度,无论是fine-tuning还是该网络结构都方便了不少.这里 ...