Vert.x TCP客户端
Vert.x带有内置的TCP客户端,可轻松创建TCP客户端并以异步模式使用它们。 " Vert.x" TCP客户端类称为" io.vertx.core.net.NetClient"。
创建一个TCP客户端
我们可以通过创建NetClient实例来创建TCP客户端。通过" Vertx"对象的方法" createNetClient()"创建" NetClient"的实例。这是创建" NetClient"实例的方法:
NetClient tcpClient = vertx.createNetClient();
通常,我们将在一个垂直内部创建一个" NetClient"。这是从垂直内部创建Vert.xNetClient的样子:
import io.vertx.core.AbstractVerticle;
import io.vertx.core.net.NetClient;
public class VertxTcpClientVerticle extends AbstractVerticle {
public void start() {
NetClient tcpClient = vertx.createNetClient();
}
}
连接到远程服务器
我们可以通过调用connect()方法连接到远程服务器。这是调用connect()方法的样子:
public class VertxTcpClientVerticle extends AbstractVerticle {
public void start() {
NetClient tcpClient = vertx.createNetClient();
tcpClient.connect(80, "Hyman.com",
new Handler<AsyncResult<NetSocket>>(){
@Override
public void handle(AsyncResult<NetSocket> result) {
NetSocket socket = result.result();
}
});
}
}
我们传递远程服务器的TCP端口以及域名,以及建立连接时将调用的" Handler"对象。我们可以通过传递给处理程序的handle()方法的AsyncResult实例获取对连接到远程服务器的NetSocket的引用。
写数据
我们可以通过NetSocket``write()方法将数据写入TCP连接。看起来是这样的:
public class VertxTcpClientVerticle extends AbstractVerticle {
public void start() {
NetClient tcpClient = vertx.createNetClient();
tcpClient.connect(80, "Hyman.com",
new Handler<AsyncResult<NetSocket>>(){
@Override
public void handle(AsyncResult<NetSocket> result) {
NetSocket socket = result.result();
socket.write("GET / HTTP/1.1\r\nHost: Hyman.com\r\n\r\n");
}
});
}
}
write()方法是异步的,并立即返回。到write()方法返回时,数据可能尚未发送。
Vert.x NetSocket包含更多版本的write()方法,使我们可以编写例如数据的"缓冲区"到" NetSocket"。
读取数据
为了从NetSocket中读取数据,我们需要在NetSocket中注册一个Handler方法。这是在NetSocket上注册Handler的方法:
public class VertxTcpClientVerticle extends AbstractVerticle {
public void start() {
NetClient tcpClient = vertx.createNetClient();
tcpClient.connect(80, "Hyman.com",
new Handler<AsyncResult<NetSocket>>(){
@Override
public void handle(AsyncResult<NetSocket> result) {
NetSocket socket = result.result();
socket.write("GET / HTTP/1.1\r\nHost: Hyman.com\r\n\r\n");
socket.handler(new Handler<Buffer>(){
@Override
public void handle(Buffer buffer) {
System.out.println("Received data: " + buffer.length());
System.out.println(buffer.getString(0, buffer.length()));
}
});
}
});
}
}
当从远程服务器接收到数据时,将调用Handler的handle()方法。
关闭TCP连接
一旦使用完TCP客户端,就需要再次关闭它。我们可以通过调用NetClient实例的close()方法来关闭TCP客户端。看起来是这样的:
tcpClient.close();
同样,NetClient的close()方法是异步的,因此底层的TCP连接可能在close()方法返回时尚未关闭。

