2016-07-27 1 views
1

Je suis nouveau à Scala. J'apprends le multi-threading dans Scala. Une façon de multi-thread dans Scala est scala.actors mais il est obsolète de nos jours. Donc, la nouvelle façon est d'utiliser scala.concurrent ou akka.actor. Je veux utiliser scala.concurrent. Scénario: Je souhaite créer un serveur de conversation qui accepte les connexions de plusieurs clients simultanément et les réponses. la façon dont je suis en train de faire est:Comment utiliser Futures pour 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+"]") 
    } 

mais après l'exécution du programme La sortie dit:

New Response made [false] 

signifie que le terme n'a pas été exécuté. Même le sommeil ne fonctionne pas. Je sais que je manque quelque chose ici mais ne peux pas le comprendre. Je sais que while (true) dans le futur n'est pas correct, mais vrai pour le fonctionnement continu du serveur. Je sais que mon chemin est mauvais. Ce que je demande est: quelle est la bonne façon de le faire?

Répondre

3

response est un avenir commençant par un while(true). Il n'y a aucun moyen de l'achever.

+0

Alors quoi d'autre dois-je utiliser ou faire ?? –

+0

@YashBhardwaj Comprenez-vous ce qu'est un 'Future'? C'est comme une boîte qui contiendra le résultat d'un calcul qui sera complété à un moment donné dans le futur. Dans votre code, le calcul contient une boucle infinie, donc le calcul ne sera jamais fait. Supprimez la boucle, et toute la partie 'serverSocket.accept()' de 'Future'. Il y a trop à expliquer dans un commentaire ici. – Jesper

+0

@Jesper ok c'est vrai. Je pense que j'ai mal compris Future. Désolé. Tout ce que je veux faire est de faire un serveur multithread comme un salon de discussion. J'ai vu [cette] vidéo (https://www.youtube.com/watch?v=dX_pgQuEB2o#t=24.868041) qui utilise 'scala.actors' mais qui est dépréciée. L'avenir est le nouveau concept de la concurrence (je crois). Donc c'est ça. –