У меня есть требование строго ограничить количество подключений на основе имени входа и имени хоста/порта, к которому подключен клиент.Ограничение соединений Netty на основе имени хоста/порта и имени пользователя
Любые мысли о подходе?
У меня есть требование строго ограничить количество подключений на основе имени входа и имени хоста/порта, к которому подключен клиент.Ограничение соединений Netty на основе имени хоста/порта и имени пользователя
Любые мысли о подходе?
Я думаю, вы можете использовать ChannelGroup для отслеживания соединений. Основываясь на содержании channelGroup, принимайте решения об ограничении возможности подключения. См. Фрагмент кода ниже. Все каналы, которые добавляются в группу каналов, автоматически удаляются при закрытии.
class YourHandler extends SimpleChannelHandler {
ChannelGroup channelGroup = new DefaultChannelGroup();
@Override
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e)
{
// make a decision if you want to accept connection
// if not just close it using ctc.getChannel().close()
}
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
{
channelGroup.add(ctx.getChannel());
}
}
Изучив код «ChannelGroup» сегодня, я считаю, что должен хранить «карту» имен групп каналов (на основе имени пользователя), сопоставленных с группами каналов. то есть 'ConcurrentHashMap'. Таким образом, я могу логически группировать все Каналы, которые связаны для определенных имен пользователей. Затем я могу обратиться к каждой группе по имени пользователя и найти соответствующие подсчеты. Звучит ли это разумно? –
Да, это абсолютно разумно. –