Sockets

Status
Niet open voor verdere reacties.

Zwijnenkop

Gebruiker
Lid geworden
18 jun 2008
Berichten
55
Hallo,

Gisteren heb ik precies dezelfde vraag gesteld bij de programmeertaal Perl, maar aangezien ik vele malen meer verstand heb van Java dan van Perl, stel ik deze vraag ook maar hier, omdat ik hier andere antwoorden verwacht.

Hieronder een stuk van de Java-code (ja ik weet dat er PHP staat):
PHP:
public void listenSocket(){
	try{
		server = new ServerSocket(port);
	}catch(IOException e){
		System.out.println("Could not listen on port "+ port);
		System.exit(-1);
	}
	while(true){
		SocketBucket b;
		try{
			b = new SocketBucket(server.accept());
			Thread t = new Thread(b);
			t.start();
		}catch (IOException e){
			System.out.println("Accept failed: "+ port);
			System.exit(-1);
		}
	}
}
SocketBucket is een klasse die Runnable overschrijft.
Op deze manier kunnen er meer dan een connecties worden gemaakt met de serversocket. Nu kan via deze manier een één op één connectie tot stand worden gebracht, maar ik had ook graag dat de server een bericht aan ALLE sockets kan verzenden.

Nu had ik gedacht om al die SocketBuckets in een ArrayList te stoppen en dan een voor een alles sturen. Is er een manier die ervoor zorgt dat dit sneller kan?

Alvast bedankt,

Marc
 
Laatst bewerkt:
Ik denk dat een for each loopje op je arraylist inderdaad de enige oplossing is. Je hebt sowieso een verzameling van n SocketBuckets, waarnaar je voor elke SocketBucket je bericht verzendt. Op een lager programmeerniveau wordt er toch één voor één het bericht verzonden.
 
Ik gebruik ook een arraylist, maar het versturen van de boodschap naar de verschillende sockets doe ik ook door middel van een nieuwe thread, zo moet je niet wachten tot de volledige connectie is gemaakt en de boodschap verzonden voor je de volgende socket kan waarschuwen.
Ik wil ook waarschuwen voor een probleem die ik ben tegengekomen. Mijn complete programma liep vast zonder enige vorm van waarschuwing als een socket niet officieel gesloten was maar de andere kant niet meer bestond, blijkbaar hield de vastgelopen thread een lock op iets wat de alle socketthreads nodig hadden om communicatie te maken en alles liep vast. Vooraleer ik dat door had waren er weken gepasseerd. Controleer dus eerst of er nog iemand aan de ander kant zit vooraleer je een bericht stuurt, en voor het geval dat het programma juist wordt afgesloten tussen je controle en het uitvoeren van je bericht moet je ook zorgen voor een werkende timeoutThread.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan