Я создал приложение. Он имеет backend в vertx (java), и я ударяю его с клиента, используя sockJs. Я хочу выполнить тестирование нагрузки (тестирование производительности/производительности) для этого приложения. Раньше я не тестировал нагрузку. Может кто-то, пожалуйста, помогите мне, как это можно сделать? Например, я хочу поражать сервер одновременно со многими подключениями и видеть, когда он терпит неудачу, и что я могу сделать для его улучшения. Вот основной кодЗагрузка тестов для приложений sockjs и vertx
HttpVerticle.java
package sockjs;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpServer;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.sockjs.SockJSHandler;
import io.vertx.ext.web.handler.sockjs.SockJSHandlerOptions;
import io.vertx.ext.web.handler.sockjs.SockJSSocket;
public class HttpVerticle extends AbstractVerticle {
static int count = 0;
@Override
public void start() throws Exception {
HttpServer server = vertx.createHttpServer();
Router router = Router.router(Vertx.vertx());
SockJSHandlerOptions options = new SockJSHandlerOptions();
options.setHeartbeatInterval(20000);
SockJSHandler sockJSHandler = SockJSHandler.create(vertx, options);
sockJSHandler.socketHandler(this::myHandler);
router.route("/myapp/*").handler(sockJSHandler);
router.route("/myway/*").handler(sockJSHandler);
server.requestHandler(router::accept).listen(8080);
}
private void myHandler(SockJSSocket sockJSSocket) {
System.out.println("Connection established " + count); //Calls when the connection is established
count++;
System.out.println(sockJSSocket);
//sockJSSocket.handler(this::processMessage);
sockJSSocket.handler(buffer -> { //everytime a message is received, a reply is sent back in uppercase.
System.out.println(buffer.toString());
String reply = buffer.toString();
reply = reply.toUpperCase();
sockJSSocket.write((Buffer.buffer(reply)));
});
}
private void processMessage(Buffer buffer) {
System.out.println(buffer.toString());
}
}
Main.java
package sockjs;
import io.vertx.core.Vertx;
public class Main {
public static void main(String[] args) {
System.out.println("Vertx server started");
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new HttpVerticle());
}
}
И клиент может быть как:
var sockJsUrl = "https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.1.1/sockjs.min.js";
var head = document.querySelector("head");
var script = document.createElement("script");
script.type = "text/javascript";
script.src = sockJsUrl;
head.appendChild(script);
var sock = new SockJS("http://localhost:8080/myapp");
sock.onopen = function() {
console.log("Connection open", sock.readyState);
}
sock.onmessage = function(event) {
console.log("Message from server");
console.log(event);
}
sock.onclose = function() {
console.log("Connection closed", sock.readyState);
}
sock.onerror = function() {
console.log("Connection error", sock.readyState);
}
Откровенно говоря, у меня нет знания об эффективности тестирования. Поэтому, если кто-то даст мне подробности, я буду благодарен.
Мой проект находится в sockJs, а не в WebSockets. Итак, как я могу использовать thor для этого, поскольку в документе говорится, что Thor использует только протокол ws? – CuriousMind