2012-05-28 1 views
1

Я новичок в Netty, и я пытаюсь создать простой SMTP-сервер. Проблема, с которой я столкнулся, заключается в том, что большинство команд SMTP-сервера состоят из одной строки, которая легко читается в методе messageReceived(). Однако после получения от клиента нескольких команд одной строки часть данных «данных» может содержать любое количество строк. Это отлично работает с короткими электронными письмами, но более длинные электронные письма могут привести только к частичным данным. Я понимаю, что это связано с тем, что сейчас у меня нет никаких декодеров кадров.Декодер кадра Netty для протокола с переменными линиями для запроса?

Проблема заключается в том, что однолинейные команды ограничены линией перевода строки, но раздел «данные» состоит из любых числовых строк, заканчивающихся символом «.». по собственной линии.

Возможно ли создать декодер кадра, который работает как для однолинейных команд, так и для многострочных запросов, заканчивающихся специальной последовательностью символов?

Спасибо!

Dustin

ответ

1

Вам не обязательно нужен один декодер, чтобы сделать обе работы. Вы можете создать два декодера, один для заголовков и один для части данных. Как только вы закончите часть заголовка, получите ссылку на конвейер, удалите «декодер заголовка» и добавьте «декодер данных». Как только это будет завершено, сбросьте конвейер в исходную конфигурацию и продолжите.

+0

Первоначально я сконфигурировал конвейер в обработчике, который делится всеми входящими запросами. Если я «получаю ссылку на конвейер» при обработке запроса, является ли этот конвейер конкретным для этого запроса (что означает, что я могу добавлять/удалять декодеры, не затрагивая другие запросы)? – user1422475

+0

Вы ставите! Не. Разве нетти здорово! – Nicholas

+0

Прохладный. Спасибо за вашу помощь! – user1422475

 Смежные вопросы

  • Нет связанных вопросов^_^