Я использую Netty версии 2.6.0.Final.Netty - вызов channel.disconnect() фактически закрывает канал
Если я правильно понимаю документацию Netty, вызов функции disconnect() на канале должен позволить мне позвонить connect() для подключения позже. Однако, когда я вызываю disconnect(), вызываются как channelDisconnected(), так и channelClosed() моего подкласса SimpleChannelHandler.
Я открыл это в режиме отладки и в основном порядок событий:
- Я называю разъединение() на моем канале
Channels.disconnect() вызывается:
public static ChannelFuture disconnect(Channel channel) { ChannelFuture future = future(channel); channel.getPipeline().sendDownstream(new DownstreamChannelStateEvent( channel, future, ChannelState.CONNECTED, null)); return future; }
В конечном счете вызывается NioSocketPipelineSink.eventSunk(), а соответствующая часть:
case CONNECTED: if (value != null) { connect(channel, future, (SocketAddress) value); } else { channel.worker.close(channel, future); } break;
Так, так как значение равно нулю и состояние CONNECTED, канал закрывается (хотя по here СВЯЗАННЫХ с нулем следует указать запрос на отключение, не обязательно близко.
Так что я что-то пропустил? Какой смысл отключать(), если он просто приводит к закрытию канала?
Это не огромная проблема, потому что, если мне нужно, я могу просто создать новый канал для своей ситуации, но из первоначальной проверки это кажется ошибкой Netty, если только я не просто недопонимаю, как это предполагается работа, или я делаю что-то глупое.
Хм, я полагаю, это имеет смысл. В основном я искал способ повторного использования Netty TCP-каналов после их отсоединения без необходимости полностью воссоздавать весь канал и конвейер (и обновлять объекты, ссылающиеся на него), но, вероятно, это не так дорого, чтобы быть проблемой , –
TCP-соединение почти всегда представляет собой «жесткое» соединение на более высоком уровне; для большинства случаев это будет больше работы и больше путаницы, пытаясь повторно использовать ресурсы более низкого уровня, чем просто отбрасывать их, когда заканчивается соединение более высокого уровня. –