J'ai un serveur de chat multi-threads qui fonctionne avec plusieurs clients (chaque client est traité dans un nouveau thread).
Si un client se déconnecte, le thread correspondant sur le serveur s'accroche à inputstream.readLine() qui est un appel bloquant.
Comment puis-je définir une sorte de délai d'attente afin de pouvoir fermer le socket et libérer le thread après 2000 ms sans réponse ?
class Handler(socket: Socket) extends Runnable {
def run() : Unit = {
val inputstream = new BufferedReader(new InputStreamReader(socket.getInputStream()))
val outputstream = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))
var break = false
while(break != true){
val input = inputstream.readLine() // blocking call
// how do i time out after 2000ms?
input match {
case "update" =>
outputstream.write("message")
outputstream.newLine()
outputstream.flush()
case _ => // any other input, break and close socket
break = true
}
}
socket.close()
}
}
object ChatServer extends App {
val server = new ServerSocket(10000)
while(true) {
val socket = server.accept // blocking call
(new Thread(new Handler(socket))).start()
// some condition{
// server.close()
// }
}
}