У меня есть простое приложение vert.x:Vert.x многопоточной веб-сокет
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);
}
}
При подключении этого сервера с несколькими клиентами, я вижу, что он работает в одном потоке. Но я хочу обрабатывать каждое клиентское соединение параллельно. Как я должен изменить этот код, чтобы сделать это?
Я бы обернул это в «Вертикаль» и начал «Вертикаль» с помощью 'DeploymentOptions.setInstances()' несколько раз. Я могу привести пример, если это то, что вы хотите. – alexvetter
Спасибо, вот что я точно сделал)) Просто колебались. –
Пожалуйста, подумайте о ответе Уилла. Вероятно, вам стоит взглянуть на [Event-driven Concurrency] (http://berb.github.io/diploma-thesis/community/055_events.html) и асинхронный ввод-вывод. – alexvetter