我是 vert.x 的新手。我正在尝试 vert.x “NetServer” 功能。http://vertx.io/core_manual_java.html#writing-tcp-servers-and-clients它就像一个魅力。
但是,我还读到“Verticle 实例是严格单线程的。
如果您创建一个简单的 TCP 服务器并部署它的单个实例,那么该服务器的所有处理程序总是在同一个事件循环(线程)上执行。”
目前,对于我的实现,我想接收 TCP 字节流,然后触发另一个组件。但这不应该是 Verticle 的“开始”方法中的阻塞调用。那么,在 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");
}
}
应该是什么机制使它成为非阻塞调用。