У меня есть API, который использует netty для открытия клиентского соединения с tcp-сервером.Сервер может отправлять данные клиенту в любое время.Я сталкиваюсь со следующим сценарием:
- Клиент подключается к серверу
- Отправляет данные на сервер
- Отключается, и JVM существует (сначала не уверен, что произойдет)
Это то, что я ожидаю:
- Клиент подключается к серверу
- Отправляет данные на сервер
- Клиент просто держит соединения открытыми, ожидаяполучать данные или отправлять данные пользователю клиентского API.
Это схема моего метода подключения (очевидно, что вокруг него гораздо больший API):
```
public FIXClient connect(String host, int port) throws Throwable {
...
ChannelPipeline pipe = org.jboss.netty.channel.Channels.pipeline(...);
ChannelFactory factory = new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ClientBootstrap bootstrap = new ClientBootstrap(factory);
bootstrap.setPipeline(pipe);
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true);
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
//forcing the connect call to block
//don't want clients to deal with async connect calls
future.awaitUninterruptibly();
if(future.isSuccess()){
this.channel = future.getChannel();
//channel.getCloseFuture();//TODO notifies whenever channel closes
}
else{
throw future.getCause();//wrap this in a more specific exception
}
return this;
}
`` `