Java-Vert.x多线程网络套接字
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java-Vert.x多线程网络套接字,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1671字,纯文字阅读大概需要3分钟。
内容图文
![Java-Vert.x多线程网络套接字](/upload/InfoBanner/zyjiaocheng/683/0dec562060fd4e87ab0f49f0001f0ab2.jpg)
我有简单的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);
}
}
当我将此服务器与多个客户端连接时,我看到它在一个线程中工作.但是我想并行处理每个客户端连接.我应该如何更改此代码来做到这一点?
解决方法:
这个:
new VertxOptions().setWorkerPoolSize(40).setInternalBlockingPoolSize(40)
看起来您正在尝试创建自己的HTTP连接池,这可能不是您真正想要的.
Vert.x和其他基于非阻塞事件循环的框架的想法是,我们不尝试使用1线程->. 1连接亲和力,而是当事件循环线程当前正在处理的请求正在等待IO(例如,数据库的响应)时,即事件循环线程被释放以服务于另一个连接.然后,这允许单个事件循环线程以类似并发的方式服务多个连接.
如果您想充分利用计算机上的所有核心,而只运行一个Verticle,则在部署Verticle时将实例数设置为Core数.
IE浏览器
Vertx.vertx().deployVerticle("MyVerticle", new DeploymentOptions().setInstances(Runtime.getRuntime().availableProcessors()));
内容总结
以上是互联网集市为您收集整理的Java-Vert.x多线程网络套接字全部内容,希望文章能够帮你解决Java-Vert.x多线程网络套接字所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。