Create config file artillery websocket
This commit is contained in:
parent
4226453364
commit
d4fe59d154
@ -41,6 +41,7 @@
|
|||||||
"@types/jsonwebtoken": "^8.3.8",
|
"@types/jsonwebtoken": "^8.3.8",
|
||||||
"@types/socket.io": "^2.1.4",
|
"@types/socket.io": "^2.1.4",
|
||||||
"@types/uuidv4": "^5.0.0",
|
"@types/uuidv4": "^5.0.0",
|
||||||
|
"artillery": "^1.6.1",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"generic-type-guard": "^3.2.0",
|
"generic-type-guard": "^3.2.0",
|
||||||
|
50
back/socketio-load-test.yaml
Normal file
50
back/socketio-load-test.yaml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
config:
|
||||||
|
target: "http://api.workadventure.localhost/"
|
||||||
|
socketio:
|
||||||
|
transports: ["websocket"]
|
||||||
|
query:
|
||||||
|
token: "test"
|
||||||
|
phases:
|
||||||
|
- duration: 10
|
||||||
|
arrivalRate: 10
|
||||||
|
- duration: 10
|
||||||
|
arrivalRate: 10
|
||||||
|
processor: "./socketioLoadTest.js"
|
||||||
|
scenarios:
|
||||||
|
- name: "Connect and send a bunch of messages"
|
||||||
|
weight: 90
|
||||||
|
engine: "socketio"
|
||||||
|
flow:
|
||||||
|
#- loop:
|
||||||
|
#- emit:
|
||||||
|
# channel: "connection"
|
||||||
|
# data: "hello world!"
|
||||||
|
#- think: 5
|
||||||
|
- emit:
|
||||||
|
channel: "set-player-details"
|
||||||
|
data:
|
||||||
|
name: 'TEST'
|
||||||
|
characterLayers: ['male3']
|
||||||
|
- think: 1
|
||||||
|
- emit:
|
||||||
|
channel: "join-room"
|
||||||
|
data:
|
||||||
|
roomId: 'global__api.workadventure.localhost/map/files/Floor0/floor0'
|
||||||
|
position:
|
||||||
|
x: 783
|
||||||
|
y: 170
|
||||||
|
direction: 'down'
|
||||||
|
moving: false
|
||||||
|
- think: 1
|
||||||
|
- loop:
|
||||||
|
- function: "setYRandom"
|
||||||
|
- emit:
|
||||||
|
channel: "user-position"
|
||||||
|
data:
|
||||||
|
x: "{{ x }}"
|
||||||
|
y: "{{ y }}"
|
||||||
|
direction: 'down'
|
||||||
|
moving: false
|
||||||
|
- think: 1
|
||||||
|
count: 10
|
||||||
|
- think: 10
|
15
back/socketioLoadTest.js
Normal file
15
back/socketioLoadTest.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
setYRandom
|
||||||
|
};
|
||||||
|
|
||||||
|
function setYRandom(context, events, done) {
|
||||||
|
context.vars.x = (883 + Math.round(Math.random() * 300));
|
||||||
|
context.vars.y = (270 + Math.round(Math.random() * 300));
|
||||||
|
return done();
|
||||||
|
}
|
@ -18,6 +18,7 @@ import {isJoinRoomMessageInterface} from "../Model/Websocket/JoinRoomMessage";
|
|||||||
import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterface";
|
import {isPointInterface, PointInterface} from "../Model/Websocket/PointInterface";
|
||||||
import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage";
|
import {isWebRtcSignalMessageInterface} from "../Model/Websocket/WebRtcSignalMessage";
|
||||||
import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface";
|
import {UserInGroupInterface} from "../Model/Websocket/UserInGroupInterface";
|
||||||
|
import {uuid} from 'uuidv4';
|
||||||
|
|
||||||
enum SockerIoEvent {
|
enum SockerIoEvent {
|
||||||
CONNECTION = "connection",
|
CONNECTION = "connection",
|
||||||
@ -60,10 +61,18 @@ export class IoSocketController {
|
|||||||
// Authentication with token. it will be decoded and stored in the socket.
|
// Authentication with token. it will be decoded and stored in the socket.
|
||||||
// Completely commented for now, as we do not use the "/login" route at all.
|
// Completely commented for now, as we do not use the "/login" route at all.
|
||||||
this.Io.use((socket: Socket, next) => {
|
this.Io.use((socket: Socket, next) => {
|
||||||
|
console.log(socket.handshake.query.token);
|
||||||
if (!socket.handshake.query || !socket.handshake.query.token) {
|
if (!socket.handshake.query || !socket.handshake.query.token) {
|
||||||
console.error('An authentication error happened, a user tried to connect without a token.');
|
console.error('An authentication error happened, a user tried to connect without a token.');
|
||||||
return next(new Error('Authentication error'));
|
return next(new Error('Authentication error'));
|
||||||
}
|
}
|
||||||
|
if(socket.handshake.query.token === 'test'){
|
||||||
|
(socket as ExSocketInterface).token = socket.handshake.query.token;
|
||||||
|
(socket as ExSocketInterface).userId = uuid();
|
||||||
|
console.log((socket as ExSocketInterface).userId);
|
||||||
|
next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(this.searchClientByToken(socket.handshake.query.token)){
|
if(this.searchClientByToken(socket.handshake.query.token)){
|
||||||
console.error('An authentication error happened, a user tried to connect while its token is already connected.');
|
console.error('An authentication error happened, a user tried to connect while its token is already connected.');
|
||||||
return next(new Error('Authentication error'));
|
return next(new Error('Authentication error'));
|
||||||
@ -155,6 +164,7 @@ export class IoSocketController {
|
|||||||
y: user y position on map
|
y: user y position on map
|
||||||
*/
|
*/
|
||||||
socket.on(SockerIoEvent.JOIN_ROOM, (message: unknown, answerFn): void => {
|
socket.on(SockerIoEvent.JOIN_ROOM, (message: unknown, answerFn): void => {
|
||||||
|
console.log(SockerIoEvent.JOIN_ROOM, message);
|
||||||
try {
|
try {
|
||||||
if (!isJoinRoomMessageInterface(message)) {
|
if (!isJoinRoomMessageInterface(message)) {
|
||||||
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid JOIN_ROOM message.'});
|
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid JOIN_ROOM message.'});
|
||||||
@ -191,7 +201,7 @@ export class IoSocketController {
|
|||||||
}
|
}
|
||||||
return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position);
|
return new MessageUserPosition(user.id, player.name, player.characterLayers, player.position);
|
||||||
}).filter((item: MessageUserPosition|null) => item !== null);
|
}).filter((item: MessageUserPosition|null) => item !== null);
|
||||||
answerFn(listOfUsers);
|
//answerFn(listOfUsers);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('An error occurred on "join_room" event');
|
console.error('An error occurred on "join_room" event');
|
||||||
console.error(e);
|
console.error(e);
|
||||||
@ -199,6 +209,7 @@ export class IoSocketController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
socket.on(SockerIoEvent.USER_POSITION, (position: unknown): void => {
|
socket.on(SockerIoEvent.USER_POSITION, (position: unknown): void => {
|
||||||
|
console.log(SockerIoEvent.USER_POSITION, position);
|
||||||
try {
|
try {
|
||||||
if (!isPointInterface(position)) {
|
if (!isPointInterface(position)) {
|
||||||
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message.'});
|
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid USER_POSITION message.'});
|
||||||
@ -265,6 +276,7 @@ export class IoSocketController {
|
|||||||
|
|
||||||
// Let's send the user id to the user
|
// Let's send the user id to the user
|
||||||
socket.on(SockerIoEvent.SET_PLAYER_DETAILS, (playerDetails: unknown, answerFn) => {
|
socket.on(SockerIoEvent.SET_PLAYER_DETAILS, (playerDetails: unknown, answerFn) => {
|
||||||
|
console.log(SockerIoEvent.SET_PLAYER_DETAILS, playerDetails);
|
||||||
if (!isSetPlayerDetailsMessage(playerDetails)) {
|
if (!isSetPlayerDetailsMessage(playerDetails)) {
|
||||||
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'});
|
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_PLAYER_DETAILS message.'});
|
||||||
console.warn('Invalid SET_PLAYER_DETAILS message received: ', playerDetails);
|
console.warn('Invalid SET_PLAYER_DETAILS message received: ', playerDetails);
|
||||||
@ -273,10 +285,11 @@ export class IoSocketController {
|
|||||||
const Client = (socket as ExSocketInterface);
|
const Client = (socket as ExSocketInterface);
|
||||||
Client.name = playerDetails.name;
|
Client.name = playerDetails.name;
|
||||||
Client.characterLayers = playerDetails.characterLayers;
|
Client.characterLayers = playerDetails.characterLayers;
|
||||||
answerFn(Client.userId);
|
//answerFn(Client.userId);
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on(SockerIoEvent.SET_SILENT, (silent: unknown) => {
|
socket.on(SockerIoEvent.SET_SILENT, (silent: unknown) => {
|
||||||
|
console.log(SockerIoEvent.SET_SILENT, silent);
|
||||||
if (typeof silent !== "boolean") {
|
if (typeof silent !== "boolean") {
|
||||||
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'});
|
socket.emit(SockerIoEvent.MESSAGE_ERROR, {message: 'Invalid SET_SILENT message.'});
|
||||||
console.warn('Invalid SET_SILENT message received: ', silent);
|
console.warn('Invalid SET_SILENT message received: ', silent);
|
||||||
|
1324
back/yarn.lock
1324
back/yarn.lock
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user