Scala播放框架和NIO.2

时间:2016-06-18 16:57:27

标签: java scala asynchronous playframework nio

我在scala编程以使用play framework 2.5.3开发Web应用程序,我需要创建一个TCP服务器/客户端,它将利用play的异步模型。经过一番阅读。 我在Java 7中了解了NIO.2's AsynchronousServerSocketChannel/AsynchronousSocketChannel。我在Github上找到了针对Scala的NIO.2实现(https://gist.github.com/happy4crazy/1901b1be0cb924898d13)。

修改后,我能够运行代码并检查jvisualvm中的线程。我注意到NIO.2在接受连接时正在创建它自己的线程。我担心NIO.2's Threadsplay framework's调度程序线程会在高压力下导致问题并减慢Web应用程序的速度。这会导致问题,并且有更好的方法integrate NIO.2使用play框架的异步模型吗?

提前感谢你 弗朗西斯

1 个答案:

答案 0 :(得分:0)

当Play使用Netty进行I / O时,Netty有自己的线程池,它不会导致问题(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);