WebSockets
Open source
WebSockets
Here’s a load test for the QuickPizza WebSocket API, available on https://quickpizza.grafana.com/ws.
Multiple VUs connect using a VU-indexed user name, and send random messages.
Each VU receives messages sent by all other VUs.
JavaScript
import { randomString, randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.2.0/index.js';
import ws from 'k6/ws';
import { check, sleep } from 'k6';
const sessionDuration = randomIntBetween(3000, 6000); // user session between 3s and 6s
export const options = {
vus: 10,
iterations: 10,
};
export default function () {
const url = `wss://quickpizza.grafana.com/ws`;
const params = { tags: { my_tag: 'my ws session' } };
const user = `user_${__VU}`;
const res = ws.connect(url, params, function (socket) {
socket.on('open', function open() {
console.log(`VU ${__VU}: connected`);
socket.send(JSON.stringify({ msg: 'Hello!', user: user }));
socket.setInterval(function timeout() {
socket.send(
JSON.stringify({
user: user,
msg: `I'm saying ${randomString(5)}`,
foo: 'bar',
})
);
}, randomIntBetween(1000, 2000)); // say something every 1-2 seconds
});
socket.on('ping', function () {
console.log('PING!');
});
socket.on('pong', function () {
console.log('PONG!');
});
socket.on('close', function () {
console.log(`VU ${__VU}: disconnected`);
});
socket.on('message', function (message) {
const data = JSON.parse(message);
console.log(`VU ${__VU} received message: ${data.msg}`);
});
socket.setTimeout(function () {
console.log(`VU ${__VU}: ${sessionDuration}ms passed, leaving the website`);
socket.send(JSON.stringify({ msg: 'Goodbye!', user: user }));
}, sessionDuration);
socket.setTimeout(function () {
console.log(`Closing the socket forcefully 3s after graceful LEAVE`);
socket.close();
}, sessionDuration + 3000);
});
check(res, { 'Connected successfully': (r) => r && r.status === 101 });
sleep(1);
}
Was this page helpful?
Related documentation
Related resources from Grafana Labs
Additional helpful documentation, links, and articles:
24 Apr

Getting started with Grafana dashboard design
In this webinar, you'll learn how to design stylish and easily accessible Grafana dashboards that tell a story.
08 May

Grafana 12 deep dive
It wouldn’t be GrafanaCON without a new release. Join us as we dive into the latest features of Grafana 12, including dashboards as code, Git-based configs, dynamic dashboards, and more.
08 May

Monitoring EA App’s 200+ core error metrics with a scalable, color-coded Grafana dashboard
Learn how engineers at Electronic Arts built a Grafana dashboard that client teams can use to monitor 200+ core error metrics.