vertx内的多线程

Rav*_*rma 1 java tcp vert.x

我是vert.x的新手.我正在尝试使用vert.x"NetServer"功能.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");
    }
}
Run Code Online (Sandbox Code Playgroud)

什么应该是使这个非阻塞调用的机制.

duf*_*ymo 8

我不认为这是vert.x的方法.

更好的方法是正确使用事件总线而不是Executor.让工作人员对总线上的事件做出响应,进行处理,并在总线完成时发出信号.

创建线程违背了使用vert.x的目的.