我是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)
什么应该是使这个非阻塞调用的机制.
我不认为这是vert.x的方法.
更好的方法是正确使用事件总线而不是Executor.让工作人员对总线上的事件做出响应,进行处理,并在总线完成时发出信号.
创建线程违背了使用vert.x的目的.
| 归档时间: |
|
| 查看次数: |
8973 次 |
| 最近记录: |