Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    Java Socket

    Ho un problema con un server multithread, in pratica la situazione è questa :

    ho un server che accetta connessioni da altri nodi della rete
    codice:
    ServerSocket sock;
    		Socket s;
    		try {
    			sock = new ServerSocket(port);
    			// Accept incoming requests (main loop)
    			for(int i=0;i<this.nAdj;i++) {
    			    // Accept a new connection
    				//System.out.println("ADJNODE porta :"+port+" in accept");
    			    s = sock.accept();
    			    new TCPServerNodeThread(s,this.detState).start();
    			    
    			   
    			}
    			sock.close();
    il guaio è che questi nodi potrebbero richiedere contemporaneamente l'accesso al server, quindi se ho due thread che richiedono allo stesso tempo la connessione, uno verrà servito dalla sock.accept, mentre l'altro mi darà connection refused, dato che il server sta istanziando il thread per gestire la connessione con il primo nodo...
    Al momento sto risolvendo la cosa inserendo delle sleep nei nodi client, creando una sorta di accesso a tempo differenziato, ma questo mi rallenta l'applicazione, mi servirebbe un meccanismo tipo la listen() delle socket c che metta in attesa le altre connessioni senza rifiutarle....


    pensavo di risolvere usando il costruttore: sock = new ServerSocket(port,1024);
    ma neanche funziona

  2. #2
    io anche per ora sto usando uno sleep pari a 100, quindi basso.
    a me funziona ma ho sicuramente meno connessioni di te.
    anche impostando uno sleep basso ti rallenta??

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    allora, ho risolto.

    Avevo un bug, per cui in realtà il thread che faceva le accept aveva dei ritardi rispetto alle connect...

    in conclusione non avevo neanche bisogno di usare il multithreading, riesco a gestire bene le code di attesa dei thread sulla accept grazie al parametro backlog.

  4. #4
    Originariamente inviato da tulkas85
    allora, ho risolto.

    Avevo un bug, per cui in realtà il thread che faceva le accept aveva dei ritardi rispetto alle connect...

    in conclusione non avevo neanche bisogno di usare il multithreading, riesco a gestire bene le code di attesa dei thread sulla accept grazie al parametro backlog.
    Posteresti il codice?
    Se nn è un problemq mi interesserebbe.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    alla fine ho lasciato il multithreading, l'unica modifica è il 500, così in teoria un nuovo thread viene parcheggiato in attesa della prossima accept.
    codice:
    ServerSocket sock;
    		Socket s;
    		try {
    			sock = new ServerSocket(port,500);
    			// Accept incoming requests (main loop)
    			for(int i=0;i<this.nAdj;i++) {
    			    // Accept a new connection
    				//System.out.println("ADJNODE porta :"+port+" in accept");
    			    s = sock.accept();
    			    new TCPServerNodeThread(s,this.detState).start();
    			    
    			   
    			}
    			sock.close();

  6. #6

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.