我在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 Threads
和play framework's
调度程序线程会在高压力下导致问题并减慢Web应用程序的速度。这会导致问题,并且有更好的方法integrate NIO.2
使用play框架的异步模型吗?
提前感谢你 弗朗西斯
答案 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);