Нетти / Мина сотрудничество. Можно ли обернуть нетбук ChannelBuffer в MINA IOBuffer?
Идея состоит в том, чтобы интегрировать Apache Vysper в существующее приложение Netty. Возможно ли, чтобы ChannelBuffer от клиента был подключен к netty как mina'a ChannelBuffer, чтобы его можно было перенести на vysper?
Идея состоит в том, чтобы создать пользовательскую конечную точку на основе netty для apache vysper, получить ChanellBuffer и передать ее vysper.
2 ответа
Apache Vysper использует MINA, неблокирующую I/O-Framework, похожую на netty.
Когда я проектировал Vysper, я старался не связывать MINA слишком тесно с остальными Vysper. Таким образом, теоретически можно заменить MINA на netty, если вы хотите пойти по этому пути. Глядя на исходный код, вам нужно перенести всю функциональность из пакета https://svn.apache.org/repos/asf/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/mina и заменить его использования. Это выполнимо, но требует некоторой работы. Кроме того, Vypser использует XMPP в качестве протокола, который основан на / является подмножеством XML. Vysper использует неблокирующий синтаксический анализатор XML 'nbxml', который является подпроектом Vysper. (https://svn.apache.org/repos/asf/mina/vysper/trunk/nbxml) Вам также необходимо заменить это на нетти-версию nbxml. В списке рассылки Vysper на dev@mina.apache.org я смогу помочь вам в этом подробнее.
Другой путь - использовать конечные точки netty и, как предложил Норман, каким-то образом передавать буферы Vysper/MINA. Это звучит как элегантный подход, но я сомневаюсь, что это более осуществимо, чем предыдущий подход. Я не знаю, есть ли у netty неблокирующий парсер XML, соответствующий потребностям Vysper. Вероятно, потребуется несколько уродливых трюков, чтобы обернуть нетти вокруг MINA.
Последний совет - использовать Vypser как есть. MINA не получала столько любви за последние годы, как netty, но это также неблокирующая IO-инфраструктура. Если вы действительно привязаны к netty, рассмотрите возможность его использования в качестве прокси-сервера, имея netty в одной конечной точке и Vysper / MINA в другой, и просто направляйте полученные байты в конечной точке netty через Vysper/MINA.
Я думаю, вы могли бы просто написать свой собственный impl, который оборачивает его. Или используйте байт-массив с резервной копией и оберните это.