2011-05-04 3 views
0

Я работаю с реализацией MINA, в которой используется NioAccepter.Java MINA Expose Socket

Моя задача состоит в том, чтобы создать базовый интерфейс java.net.Socket с обоими рамами java.net.Socket, а также с инфраструктурой MINA NIO от Apache. Это должно было быть достаточно простым, передав исходный сокет из MINA в мою структуру.

Однако мне еще не удалось разоблачить сырой сокет. Это первый раз, когда я просмотрел структуру MINA, и я довольно смущен.

Ближайший я получил в результате был такой:

((SocketChannel)((NioSession)sess).channel).socket() 

Что бы решить мои проблемы, за исключением NioSession.channel защищен.

Я что-то упустил?

ответ

2

Не многие фреймворки предоставляют вам доступ к базовому сокету. Однопоточно использовать один поток, когда другие потоки не блокируют его. Здесь MINA использует инкапсуляцию, чтобы заблокировать ее, и они используют асинхронную селекторную модель, поэтому вам не следует прикасаться к сокету вообще, иначе вы его испортите.

Как бы то ни было, лучшая идея, если вы действительно хотите использовать несколько фреймворков сокетов, - это просто использовать разные порты. Действительно, хотя, просто придерживайтесь одного. И я бы посоветовал KryoNet, который делает то же самое, но в гораздо меньшем количестве строк кода, если вы хотите спуститься и замарать что-то, что вы можете изменить и легко понять. Я уже изменил черту своей версии KryoNet.

+0

Спасибо за подсказку, но структура, с которой я имею дело, - это широко используемая библиотека, которую я не могу изменить/принудить других изменять. Я просто стараюсь не писать новую структуру для интерфейса с MINA. –

+0

Согласовано с Крисом Денеттом - MINA управляет асинхронным разъемом. Если вы используете его в другом месте, он будет разбиваться нечетными способами. –

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

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