2016-07-27 153 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'的視頻,但不推薦使用。未來是併發的新概念(我相信)。這就是事情。 –