В моей реализации Java NIO я не смог заставить SelectionKey.attach () работать. По сути, как только клиенты подключаются (OP_ACCEPT интерес операций), я добавляю их на карту, где их IP-адрес отображается на объект, который поддерживает состояние для клиента. Затем, когда происходит OP_READ, я снова получаю IP-адрес клиента, и на этот раз получаю значение из карты и таким образом получаю объект состояния клиента.
Проблема здесь в том, что я должен выполнять поиск карт КАЖДЫЙ РАЗ, когда данные считываются из сети. Там много потраченной впустую работы. Итак, я был рад видеть, что вы можете прикрепить произвольный тип объекта к SelectionKey, который должен быть легко извлечен при вызове SelectionKey.attachment (), даже если мы сейчас обрабатываем другое событие (полученное во время OP_READ по сравнению с помещенным в карта во время OP_ACCEPT).
Проблема в том, что это не работает. Когда я получаю вложение, оно всегда равно нулю. И если я установлю вложение с помощью attach (), а затем сразу же вызову attachment (), это сработает. Как-то между разными событиями он теряет связь.
Извините, мой код немного длинный для публикации здесь, но если вы посмотрите на комментарии в этой теме:
текст ссылки
... Вы увидите, что некоторые другие в основном пришли к одному и тому же выводу: что attach () и attachment () не работают и никогда не работают.
Есть ли хитрость, чтобы заставить его работать, или я застрял со злыми накладными расходами, необходимыми для ручного поиска на карте КАЖДЫЙ ВРЕМЯ, когда есть новое событие чтения для обработки?
Наконец, есть ли способ "обернуть" SelectionKey в новый подкласс, который будет правильно обрабатывать attach () и attachment ()?
Спасибо!