J'ai application simple vert.x:vert.x multi-thread web socket
public class Main {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(40).setInternalBlockingPoolSize(40));
Router router = Router.router(vertx);
long main_pid = Thread.currentThread().getId();
Handler<ServerWebSocket> wsHandler = serverWebSocket -> {
if(!serverWebSocket.path().equalsIgnoreCase("/ws")){
serverWebSocket.reject();
} else {
long socket_pid = Thread.currentThread().getId();
serverWebSocket.handler(buffer -> {
String str = buffer.getString(0, buffer.length());
long handler_pid = Thread.currentThread().getId();
log.info("Got ws msg: " + str);
String res = String.format("(req:%s)main:%d sock:%d handlr:%d", str, main_pid, socket_pid, handler_pid);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
serverWebSocket.writeFinalTextFrame(res);
});
}
};
vertx
.createHttpServer()
.websocketHandler(wsHandler)
.listen(8080);
}
}
Lorsque je connecte ce serveur avec plusieurs clients, je vois que cela fonctionne dans un thread. Mais je veux gérer chaque connexion client parallèlement. Comment je devrais changer ce code pour le faire?
Je voudrais envelopper dans un 'Verticle' et démarrer le' Verticle' avec le 'DeploymentOptions.setInstances()' plusieurs fois. Je peux donner un exemple, si c'est ce que vous voulez. – alexvetter
Merci, c'est ce que j'ai déjà fait exactement)) Juste eu des hésitations. –
S'il vous plaît, considérez la réponse de Will. Vous devriez probablement regarder [Concurrence événementielle] (http://berb.github.io/diploma-thesis/community/055_events.html) et E/S asynchrones. – alexvetter