我正在ClientConnector
使用NetClient
and编写课程JsonParser
。
以下是我进入的步骤:
- 使用连接到服务器
NetClient
- 用于
Pump
处理背压 - 用于
io.vertx.core.parsetools.JsonParser
解析完整的JSON响应对象 - 在套接字上写入 2 个请求
问题是我只收到第一个请求的服务器响应。
如何获得后续请求的响应?
下面是AsyncClientConnector
类代码:
package com.luckyrhinos.sbg.robots;
import static io.vertx.core.parsetools.JsonEventType.VALUE;
import static org.awaitility.Awaitility.await;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;
import com.luckyrhinos.core.common.utils.RefHolder;
import io.vertx.reactivex.core.Vertx;
import io.vertx.reactivex.core.net.NetClient;
import io.vertx.reactivex.core.net.NetSocket;
import io.vertx.reactivex.core.parsetools.JsonParser;
import io.vertx.reactivex.core.streams.Pump;
public class JsonRequestTest {
@Test
public void testName() throws Exception {
Vertx vertx = Vertx.vertx();
NetClient client = vertx.createNetClient();
RefHolder<NetSocket> hSocket = new RefHolder<>();
AtomicBoolean ready = new AtomicBoolean(false);
client.rxConnect(12344, "localhost") //
.subscribe(socket -> {
Pump.pump(socket, socket).start();
JsonParser parser = JsonParser.newParser().objectValueMode();
hSocket.obj = socket;
socket //
.exceptionHandler(e -> {
e.printStackTrace();
client.close();
}) //
.endHandler(v -> {
System.out.println("Done!");
client.close();
}) //
.handler(parser::handle);
parser.handler(event -> {
if (event.type() == VALUE) {
System.out.println(event.value());
}
});
ready.set(true);
});
await().atMost(5, TimeUnit.SECONDS).untilTrue(ready);
ready.set(false);
hSocket.obj.write("{ \"type\":\"SetupRequest\",\"ply\":2 }");
hSocket.obj.write("{ \"type\":\"PingRequest\", \"id\":\"123456789\" }");
await().atMost(5, TimeUnit.SECONDS).untilTrue(ready);
}
}