Я реализовал свой собственный декодер кадров для анализа байтов, полученных через сокет UDP (используя NioDatagramChannelFactory и ConnectionlessBootstrap) в соответствии с нашим протоколом.Чтобы следить за тем, что происходит на сервере при получении сообщений, я добавил журналы трассировки в каждый метод обратного вызова декодера.
Похоже, что почти для каждого сообщения, получаемого сервером, мы можем видеть, что событие "channelInterestChanged"получено дважды в методе channelInterestChanged ().Значение события сначала 0 (OP_NONE), затем 1 (OP_READ).
Я прочитал документацию по этому поводу, но я все еще не уверен, что понимаю, почему я получаю такие события.Сначала я прошел через это, потому что буфер приема (или очередь селектора) был заполнен, но сервер получает это событие столько же раз, сколько получает событие «messageReceived» (до вызова метода decode ()) и все сообщения./ кадры правильно декодируются, как и ожидалось.Когда сообщения отсутствуют, я не вижу никаких событий вообще.В этом случае это, вероятно, потому что буфер приема сокета дейтаграммы заполнен.Но даже если я увеличу этот буфер приема, я продолжу видеть эти события и пропустить сообщения.
Итак, мне интересно, почему для каждого полученного сообщения сервер также получает два "channelInterestChanged", один с OP_NONEзначение и один со значением OP_READ.Пожалуйста, обратите внимание также, что в канальном конвейере после моего декодера кадров есть ExecutionHandler и другой специфичный для бизнеса обработчик (который отправляет JMS-сообщение экземпляру ActiveMQ).
Любая идея или объяснение для меня?
Спасибо.