我是 vert.x 的新手。我正在尝试 vert.x“NetServer”功能。http://vertx.io/core_manual_java.html#writing-tcp-servers-and-clients http://vertx.io/core_manual_java.html#writing-tcp-servers-and-clients它就像一个魅力。
然而,我还读到“Verticle 实例是严格单线程的。
如果您创建一个简单的 TCP 服务器并部署它的单个实例,那么该服务器的所有处理程序始终在同一事件循环(线程)上执行。”
目前,对于我的实现,我想接收 TCP 字节流,然后触发另一个组件。但这不应该是 Verticle 的“start”方法中的阻塞调用。那么,在 start 方法中编写执行器是一个好的做法吗?或者 vertx 是否自动处理这种情况。
这是一个片段
public class TCPListener extends Verticle {
public void start(){
NetServer server = vertx.createNetServer();
server.connectHandler(new Handler<NetSocket>() {
public void handle(NetSocket sock) {
container.logger().info("A client has connected");
sock.dataHandler(new Handler<Buffer>() {
public void handle(Buffer buffer) {
container.logger().info("I received " + buffer.length() + " bytes of data");
container.logger().info("I received " + new String(buffer.getBytes()));
//Trigger another component here. SHould be done in a sperate thread.
//The previous call should be returned . No need to wait for component response.
}
});
}
}).listen(1234, "host");
}
}
应该采用什么机制来使其成为非阻塞调用。
我认为这不是 vert.x 的出路。
更好的方法是正确使用事件总线而不是 Executor。让工作人员响应总线上的事件,进行处理,并在完成时向总线发出信号。
创建线程违背了使用 vert.x 的目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)