我想在 Scala 2.11 中构建一个简单的服务器来监听套接字。它应该从套接字异步读取数据并将数据从 RxScala 传递到 Observable 中。
我有一个 Java ServerSocket,应该使用readData阻塞的方法从中读取数据。这个方法启动一次,一直运行到整个程序停止:
val server = new ServerSocket(port)
def readData(server: ServerSocket): Unit = ???
Run Code Online (Sandbox Code Playgroud)
当从套接字读取数据时,我发现了两种不同的方法来避免阻塞整个程序:
new Thread {
override def run(): Unit = {
readData(server)
}
}.start()
Run Code Online (Sandbox Code Playgroud)
和
Future {
blocking {
readData(server)
}
}
Run Code Online (Sandbox Code Playgroud)
因为 Future 中没有包装返回值,然后可以将其传递给其他任务,所以 Future 的唯一任务是使计算非阻塞。所以我想知道这些方法之间是否有更大的差异?查看 Future 的实现,它看起来还使用给定的块创建并运行 Runnable。那么,如果一个人有一个永远/长时间运行的任务而没有结果,那么这些方法之一是否更可取?