2016-06-18 3 views
1

Я программирую в scala для разработки веб-приложения с использованием play framework 2.5.3, и мне нужно создать TCP-сервер/клиент, который воспользуется асинхронной моделью игры. После немного чтения. Я узнал о NIO.2'sAsynchronousServerSocketChannel/AsynchronousSocketChannel в Java 7. Я нашел реализацию NIO.2 для Scala на Github здесь (https://gist.github.com/happy4crazy/1901b1be0cb924898d13).Scala play framework и NIO.2

После его модификации я смог запустить код и изучить потоки в jvisualvm. Я заметил, что NIO.2 создает собственный поток, когда принимает соединения. Я волнуюсь, что потоки диспетчера NIO.2's Threads и play framework's вызовут проблемы и замедлят веб-приложение при повышенном напряжении. Может ли это привести к проблемам, и есть ли лучший способ для integrate NIO.2 с асинхронной моделью игрового каркаса?

Благодарим Вас заранее Фрэнсис

ответ

0

Когда Play использует Нетти для ввода/вывода, Нетти имеет свой собственный пул потоков, и это не вызывает проблем (https://www.playframework.com/documentation/2.5.x/ThreadPools). Поэтому я могу предположить, что в NIO.2 есть собственный пул потоков.

Между тем, вы можете настроить NIO.2 для использования того же пула потоков, что и в Play. Сначала извлеките пул потоков Play. Пусть это называется executor. Затем

AsynchronousChannelGroup group = AsynchronousChannelGroup.withThreadPool(executor); 
AsynchronousServerSocketChannel channel = AsynchronousServerSocketChannel.open(group); 
AsynchronousSocketChannel channel = AsynchronousSocketChannel.open(group);