Writing TCP servers and clients 编写TCP服务端和客户端
使用vertx可以很简单的编写出无阻塞的tcp服务端和客户端。下面逐一来介绍。
NetServer server = vertx.createNetServer();
可以使用NetServerOptions 来配置tcp服务端:
NetServerOptions options = new NetServerOptions().setPort(4321);
NetServer server = vertx.createNetServer(options);
使用listen方法,让服务端开始监听进入的请求。
NetServer server = vertx.createNetServer();
server.listen();
或者使用指定端口和地址:
NetServer server = vertx.createNetServer();
server.listen(1234, "localhost");
不指定的情况下,地址默认使用0.0.0.0,端口默认下为0,如果为的0话,表示随机使用一个没有被占用的端口。
NetServer server = vertx.createNetServer();
server.listen(1234, "localhost", res -> {
if (res.succeeded()) {
System.out.println("Server is now listening!");
} else {
System.out.println("Failed to bind!");
}
});
在listen方法后面设置一个handler参数,可以在监听成功后,执行handler。
当有客户端连接进来时,如果希望得到通知的话,可以如下:
NetServer server = vertx.createNetServer();
//设置客户端连接的handler
server.connectHandler(socket -> {
// Handle the connection in here
});
NetServer server = vertx.createNetServer();
//设置客户端连接的handler
server.connectHandler(socket -> {
//设置读取数据的handler
socket.handler(buffer -> {
System.out.println("I received some bytes: " + buffer.length());
});
});
Buffer buffer = Buffer.buffer();
buffer.appendFloat(12.34f).appendInt(123);
socket.write(buffer);
// Write a string in UTF-8 encoding
socket.write("some data");
// Write a string using the specified encoding
socket.write("some data", "UTF-16");
当socket连接关闭时,可以注册一个handler来监听这个事件。
socket.closeHandler(v -> {
System.out.println("The socket has been closed");
});
当socket出现异常时,可以使用exceptionHandler方法,注册一个handler来监听这个事件。
如果想通过event bus给socket发送消息,首先我们先通过writeHandlerID()方法获取socket注册在event bus上的handler,然后再使用此handler id给其发送消息。
The local address of a NetSocket can be retrieved using localAddress.
The remote address, (i.e. the address of the other end of the connection) of a NetSocket can be retrieved using remoteAddress.
如果需要发送文件,或者classpath下的资源,我们直接调用sendFile()方法。
socket.sendFile("myfile.dat");
Instances of NetSocket are also ReadStream and WriteStream instances so they can be used to pump data to or from other read and write streams.
A non SSL/TLS connection can be upgraded to SSL/TLS using upgradeToSsl.
The server or client must be configured for SSL/TLS for this to work correctly.
调用close方法来关闭一个tcp服务端,也可以给它注册一个handler来监听关闭的事件。
server.clos