问题描述
我想进行一次大炮测试,启动n个socket.io客户端,这些客户端全部侦听来自服务器的定期数据包。这个想法是服务器以一定的时间间隔广播json“帧”,我想看看客户端接收这些“帧”的速度有多快。
我在服务器上生成帧,然后将其广播给所有客户端。然后,客户端具有该帧的相同本地副本,以检查它们在接收时是否相等。我这样做是为了确保数据包完整性,因此我可以放心地使用数据包的大小和延迟来衡量吞吐量。
但是,我没有得到想要的行为。这是我的服务器代码,我的火炮脚本和相应的帮助功能。
server.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];
}
/**
* 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);
artillery_test.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];
}
// set the "items" variable for the virtual user to use in the subsequent action
userContext.vars.items = items;
return done();
}
我知道我“侦听”帧的方式很简单。我不认为仅发送伪消息来侦听传入的帧是可行的方法,但我很想知道如何仅将客户端停放在侦听模式下,然后在每次进行新操作时都检查传入数据的完整性包到达。
下面是我的客户旋转后的输出示例: 报告@ 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。
会喜欢任何提示!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)