我有简单的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);
}
}
当我连接多个客户端此服务器我看到它在一个线程。但我想要并行处理每个客户端连接。我应该如何改变这个代码来做到这一点?
我会将它包装在一个'Verticle'中,并多次使用'DeploymentOptions.setInstances()'开始'Verticle'。我可以提供一个例子,如果这是你想要的。 – alexvetter
谢谢,这就是我已经做了))只是犹豫。 –
请考虑Will的答案。你可能应该看看[事件驱动的并发性](http://berb.github.io/diploma-thesis/community/055_events.html)和异步I/O。 – alexvetter