我想运行一个火炮测试,启动 n 个 socket.io 客户端,这些客户端都侦听来自服务器的周期性数据包。这个想法是服务器以特定间隔广播 json“帧”,我想看看客户端接收这些“帧”的速度有多快。
我在服务器上生成帧,然后将其广播给所有客户端。然后客户端有一个相同的本地帧副本,以检查它们在接收时是否相等。我这样做是为了确保数据包的完整性,因此我可以自信地使用数据包的大小和延迟来测量吞吐量。
但是,我没有得到我正在寻找的行为。这是我的服务器代码,我的火炮脚本,以及相应的帮助函数。
服务器.js
// Dependencies
const express = require('express');
const http = require('http');
// note: socketIO uses JSON.stringify() natively to send and receive any objects
const socketIO = require('socket.io');
const app = express();
const server = http.Server(app);
const io = socketIO(server);
const port = 6969
app.set('port', port);
// keep time of session
let t0 = null
let command_sequence_number = 0
// Starts the server.
server.listen(port, function() {
console.log('Starting server on port ', port);
});
let num_items = 1000;
items = {}
for (let i = 0; i < num_items; i++) {
items[`item${i}`] = [0, 0, 0, 0, 0];
}
/**
* WebSocket handlers (every time a connection is made)
* @param {Object} socket
*/
io.on('connection', function(socket) {
console.log('new connection');
});
/**
* simulate data stream
*/
let frame_delay = 30; // milliseconds
setInterval(function() {
io.sockets.emit('FRAME', items);
}, frame_delay);
火炮测试.yml
config:
target: "http://localhost:6969"
processor: "build_frame.js"
phases:
- duration: 10
arrivalRate: 5
name: Simple Test Phase
scenarios:
- name: Simple Throughput Test Scenario
engine: socketio # Enable the Socket.io engine
flow:
- function: "build_frame"
- loop:
- emit:
channel: "dummy"
data: ""
response:
channel: "FRAME"
data: "{{ items }}"
count: 3600 #30frames/s * 120s = 3600 frames
build_frame.js
module.exports = { build_frame };
function build_frame (userContext, events, done) {
let num_items = 1000;
let items = {}
for (let i = 0; i < num_items; i++) {
itesm[`item${i}`] = [0, 0, 0, 0, 0];
}
// set the "items" variable for the virtual user to use in the subsequent action
userContext.vars.items = items;
return done();
}
我知道我“听”帧的方式很老套。我不认为仅仅为了侦听传入帧而发出虚拟消息是要走的路,但我很想知道如何将客户端停在侦听模式下,然后每次新的时候检查传入数据的完整性数据包到达。
这是客户端启动后我的输出示例: Report @ 01:40:08(-0700) 2020-09-02 经过时间:30 分 37 秒 场景启动:0 场景完成:0 请求完成: 746 平均响应/秒:37.49 响应时间(毫秒):最小值:1161.8 最大值:1468.1 中值:1317.1 p95:1388.5 p99:1444.4 代码:0:746
警告:高 CPU 使用率警告(pids:2056)。有关详细信息,请参阅https://artillery.io/docs/faq/#high-cpu-warnings。
会喜欢任何提示!