2016-07-27 195 views
1

我是斯卡拉新手。我正在学习Scala中的多线程技术。在斯卡拉多线程的一种方式是scala.actors,但它现在已被弃用。所以新方法是使用scala.concurrentakka.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] 

指期货未执行。即使睡眠不起作用。 我知道我缺乏这里的东西,但无法弄清楚。

UPDATE 我知道虽然(真)内部未来不是正确的方式,但真正的连续运行服务器是必要的。我知道我的方式是错误的。我问的是:什么是正确的做法?

回答

3

response是一个以while(true)开头的未来。它不可能完成。

+0

那么还应该使用什么或做什么? –

+0

@YashBhardwaj你明白'Future'是什么吗?这就像一个盒子,它将保存将在某个时刻完成的一些计算的结果。在你的代码中,计算包含一个无限循环,所以计算永远不会完成。将'loop'和'serverSocket.accept()'部分从'Future'中移除。这里有太多需要解释的评论。 – Jesper

+0

@Jesper没关系,没错。我想我误解了未来。对不起。我想要做的就是制作一个像聊天室那样的多线程服务器。我看到[this](https://www.youtube.com/watch?v=dX_pgQuEB2o#t=24.868041)使用'scala.actors'的视频,但不推荐使用。未来是并发的新概念(我相信)。这就是事情。 –