Java NIO и SSL
Я пишу сервер, используя Java NIO, и у меня есть несколько вопросов, на которые я не могу найти ответы.
Во-первых, что касается SSLEngine, как обращаться NEED_TASK
правильно в отдельной теме? Когда я вызываю задачи в отдельном потоке, они завершаются, но я понятия не имею, как вернуться к выполнению другой операции рукопожатия. Одним из вариантов будет вызов этой операции из потока, выполняющего делегированную задачу, но я думаю, что это не способ сделать это.
Другой вопрос о звонке interestOps()
из другой темы, а затем селектора потока. Мне нужно изменить ключевые интересы после того, как попытка записи на канал не записала все данные. Я думал об использовании какой-либо очереди изменений, как в учебном пособии ROX NIO, но я прочитал в другой ветке, что это не лучший способ.
1 ответ
сначала о SSLEngine, как правильно обработать NEED_TASK в отдельном потоке. Когда я вызываю задачи в отдельном потоке, они завершаются, но я понятия не имею, как вернуться к выполнению других операций рукопожатия.
Пока двигатель находится в состоянии NEED_TASK, он больше ничего не может сделать. Когда задача завершится, вы должны будете повторить операцию, которая первоначально вернула NEED_TASK, и позволить движку сказать вам, что делать дальше. Вам нужно заблокировать или отключить использование этого движка другими потоками, пока задача не будет завершена, т.е. не выбирать на этом канале.
Другой вопрос касается вызова InterestOps() из другого потока, а не из селектора. Мне нужно изменить ключевые интересы после того, как попытка записи на канал не записала все данные. Я думал об использовании какой-либо очереди изменений, как в учебном пособии ROX NIO, но я прочитал в другой ветке, что это не лучший способ.
Это был бы я. Я ненавижу эти очереди. Я просто wakeup() селектор и изменить интереса, никогда не видел проблемы с этим. Поток селектора должен корректно работать с нулевыми ключами, готовыми, но он уже должен это сделать.