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()方法返回时尚未关闭。