Imprimer
Catégorie : Programmation avancée
Affichages : 441

Serveur multi-threadé

 

 

 

Remarques :

import java.io.*;
import java.net.*;
 
class ServerTCP {
  private ServerSocket sockConn;
  private int id;
  private ServerData data; // l'objet partagé entre les threads

  public ServerTCP(int port) throws IOException {
    sockConn = new ServerSocket(port);
    data = new ServerData( ... );
    id = 0;
  }
  public void mainLoop() throws IOException {
    while(true) {
      Socket sockComm = sockConn.accept();
      id += 1;
      ThreadServer t = new ThreadServer(id, sockComm, data);
      t.start();
    }
  }
}
 
 
 

 

import java.io.*;
import java.net.*;
 
public ServerThread extends Thread {
  private Socket sockComm;  
  BufferedReader br; PrintStream ps;
  private int id;
  private ServerData data;
  // autres attributs nécessaires aux traitements des requête

  public ServerThread(int id, Socket sockComm, ServerData) throws IOException {
    this.id = id;
    this.sockComm = sockComm;
    this.data = data;
  }
 
  public void run() {    
    try {
      br = new BufferedReader(new InputStreamReader(sockComm.getInputStream()));
      ps = new PrintStream(sockComm.getOutputStream());
      requestLoop();     
    }  
    catch(IOException e) { // erreur => fin thread }
  }

  public void requestLoop() throws IOException {
    // code identique à celui du canevas serveur mono-threadé
  }

  public void processRequest1(String param1, ...) throws IOException {
    // code adapté du canevas serveur mono-threadé en utilisant
    // l'attribut data pour traiter les requêtes.
  }
 
  // etc. avec les autres méthodes processRequestX()
}