我是Scala的新手。我正在学习Scala中的多线程。 Scala中多线程的一种方法是scala.actors
,但现在已弃用。因此,新方法是使用scala.concurrent
或akka.actor
。我想使用scala.concurrent
。
场景:
我想创建一个聊天服务器,它同时接受多个客户端的连接并回复。
我想做的方式是:
while(true) {
socket = serverSocket.accept()
os = new PrintStream(socket.getOutputStream)
br = new BufferedReader(new InputStreamReader(socket.getInputStream()))
val newClient = Future {
os.println("\n\nPlease Enter the Table name to be Extracted\t:")
restr = br.readLine()
println("data received from ["+socket.getInetAddress()+"] ["+socket.getPort()+"] and TableName ["+ restr +"]\n")
new Extractor().extract(dbURL,userId,password,restr,os)
}
val clientFormed= newClient.isCompleted
println("New Client Connection ? ["+clientFormed+"]")
}
但运行程序后输出显示:
New Response made [false]
意味着期货没有执行。即使是睡眠也不起作用。 我知道我在这里缺少一些东西,但无法弄清楚。
更新 我知道虽然(真实)未来不是正确的方式,但真实是连续运行服务器所必需的。我知道我的方式是错的。我要问的是:做正确的方法是什么?
答案 0 :(得分:3)
response
是以while(true)
开头的未来。它无法完成。