2016-07-27 5 views
1

私はScalaを初めて使用しています。私はScalaでマルチスレッドを学んでいます。 Scalaのマルチスレッドの1つの方法はscala.actorsですが、現在は廃止予定です。新しい方法はscala.concurrentまたはakka.actorです。私はscala.concurrentを使いたいです。 シナリオ: 複数のクライアントの接続を同時に受け入れて応答するチャットサーバーを作りたいと思います。私がやろうとしています 方法は次のとおりです。Futures for Multithreadingの使い方は?

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] 

は先物が実行しなかったことを意味します。睡眠しても機能しません。 私はここに何か不足していることを知っていますが、それを理解することはできません。

更新日私は、将来は正しい方法ではないことを知っていますが、サーバーの連続実行には真が必要です。自分の道が間違っているのを知っている。私が求めているのは、正しい方法は何ですか?

答えて

3

responseは、while(true)で始まる将来です。それが完了することができる方法はありません。

+0

他に何を使用するのですか? –

+0

@YashBhardwajあなたは '未来'が何であるか理解していますか?これは、将来のある時点で完了する計算の結果を保持するボックスのようなものです。あなたのコードでは、計算には無限ループが含まれているため、計算は行われません。ループを取り除き、 'serverSocket.accept()'部分全体を 'Future'から削除してください。ここでのコメントで説明するにはあまりにも多くのことがあります。 – Jesper

+0

@Jesper大丈夫そうです。私は未来を誤解したと思う。そのために残念。私がやりたいことは、チャットルームのようなマルチスレッドサーバーを作ることだけです。 'scala.actors'を使用していますが推奨されていないビデオ(https://www.youtube.com/watch?v=dX_pgQuEB2o#t=24.868041)を見ました。未来はコンコルシーの新しいコンセプトです(私は信じています)。それが事です。 –