anoniem Geplaatst: 13 juli 2003 Delen Geplaatst: 13 juli 2003 Ik ben een server aan het schrijven in Java, maar ik kan geen goede manier vinden om te controleren of een client de connectie al verbroken heeft. Alle tutorials die ik kan vinden zeggen dat ik blocking I/O en threads moet gebruiken, maar daar houd ik niet van (en ik moet dan al mijn code herschrijven). Is er een standaard functie dat vergelijkbaar is met de poll() functie in Unix? Of is er een betere manier? Quote Link naar reactie
anoniem Geplaatst: 21 juli 2003 Auteur Delen Geplaatst: 21 juli 2003 RobertV, welke JDK gebruik je? In 1.4 heeft Socket een methode isClosed(), is dat wat je zoekt? Welke tutorials lees jij? Herman Quote Link naar reactie
anoniem Geplaatst: 21 juli 2003 Auteur Delen Geplaatst: 21 juli 2003 JDK 1.4.1. En nee, isClosed() controlleert alleen of ik close() heb aangeroepen. Ik zoek iets dat vergelijkbaar is met de Unix poll() functie. En de tutorials zoek ik op Google met "java socket tutorial" ofzo. Quote Link naar reactie
anoniem Geplaatst: 21 juli 2003 Auteur Delen Geplaatst: 21 juli 2003 Kun je dat niet aan de hand van de desbetreffende input-/outputstream controleren? Quote Link naar reactie
anoniem Geplaatst: 21 juli 2003 Auteur Delen Geplaatst: 21 juli 2003 Nee. Die functies blokkeren als de client nog geen data heeft verstuurd. Hoe moet ik de invoer van alle andere clients lezen als ik geblokkeerd word? Quote Link naar reactie
anoniem Geplaatst: 21 juli 2003 Auteur Delen Geplaatst: 21 juli 2003 [quote:a4e63a4eb5="RobertV"]Nee. Die functies blokkeren als de client nog geen data heeft verstuurd. Hoe moet ik de invoer van alle andere clients lezen als ik geblokkeerd word?[/quote:a4e63a4eb5] Dit soort dingen dien je in GUI-loze threads af te handelen. Quote Link naar reactie
anoniem Geplaatst: 21 juli 2003 Auteur Delen Geplaatst: 21 juli 2003 Inderdaad, om het sowieso mooi op te lossen, zul je threads moeten gebruiken. Wat is precies je bezwaar tegen threads? Quote Link naar reactie
anoniem Geplaatst: 21 juli 2003 Auteur Delen Geplaatst: 21 juli 2003 Veel mensen, onder andere de Linux kernel developers, zeggen dat een thread aanmaken voor elke client zeer inefficient is, ook al is de scheduler van de kernel nog zo goed. Quote Link naar reactie
anoniem Geplaatst: 22 juli 2003 Auteur Delen Geplaatst: 22 juli 2003 Hmmm... nog niet eerder van gehoord. Ik kan mij niet voorstellen dat in een client/server-omgeving geen nuttig gebruik van threads gemaakt kan worden. Je wilt toch niet, dat gebruikers op elkaar moeten gaan wachten? Een vergelijkbaar voorbeeld is de Java Servlet. Dat is ook een multi-threaded omgeving. En waarom? Omdat dat de meest optimale situatie is. Quote Link naar reactie
anoniem Geplaatst: 22 juli 2003 Auteur Delen Geplaatst: 22 juli 2003 [quote:5a446a76d2="RobertV"]Veel mensen, onder andere de Linux kernel developers, zeggen dat een thread aanmaken voor elke client zeer inefficient is, ook al is de scheduler van de kernel nog zo goed.[/quote:5a446a76d2]Klopt. Maar toch ontkom je er niet aan, wat je moet doen is een threadpool maken, standaard een x aantal threads initialiseren en op het moment dat er een client actief wordt deze gaan gebruiken (en weer vrijgeven als deze klaar is). Zo bespaar je de overhead van het constant aanmaken van threads... Quote Link naar reactie
anoniem Geplaatst: 22 juli 2003 Auteur Delen Geplaatst: 22 juli 2003 [quote:95eb9d8eb9="Heronymus"]Je wilt toch niet, dat gebruikers op elkaar moeten gaan wachten?[/quote:95eb9d8eb9]Unix heeft de functies poll en select waarbij je meerdere sockets kunt controleren. Deze zijn vanuit C zonder meer beschikbaar. Aangezien Unix alle devices hetzelfde behandelt (sockets, files, seriele poorten) kun je met 1 instructie wachten op keyboard-input, alle seriele poorten en tientallen sockets. Je hebt totaal geen threads nodig (oh wat is het leven toch heerlijk simpel). Ik vermoed dat je nu voor Windows programmeert aangezien je refereeert naar Unix. In de Windows API bestaat een [i:95eb9d8eb9]select[/i:95eb9d8eb9]-achtig iets (WSAselect of zoiets). Je zou deze even kunnen opzoeken, maar je zult teleurgesteld zijn in de mogelijkheden als je Unix gewend bent. Volgens mij ontkom je onder Windows niet aan threads als je meerdere connecties wilt accepteren. Quote Link naar reactie
anoniem Geplaatst: 22 juli 2003 Auteur Delen Geplaatst: 22 juli 2003 Ik programmeer voor Java (staat ook in het onderwerp :roll:) en ik kan echt geen poll/select-achtig functie vinden. Uiteindelijk heb ik de boel toch maar herschreven met threads. Quote Link naar reactie
anoniem Geplaatst: 22 juli 2003 Auteur Delen Geplaatst: 22 juli 2003 Wat is er toch tegen op threads? Er zullen ongetwijfeld andere mogelijkheden zijn in andere omgevingen, maar de thread is toch speciaal bedoeld voor dit soort zaken? Quote Link naar reactie
anoniem Geplaatst: 22 juli 2003 Auteur Delen Geplaatst: 22 juli 2003 [quote:6c62881260="RobertV"]Ik programmeer voor Java (staat ook in het onderwerp :roll:)[/quote:6c62881260]Nee, volgens mij programmeer je in een taal (Java) en dan eventueel voor een OS (Windows?). [quote:6c62881260="RobertV"].... en ik kan echt geen poll/select-achtig functie vinden. Uiteindelijk heb ik de boel toch maar herschreven met threads.[/quote:6c62881260]Toch maar terug naar Unix en C :) Quote Link naar reactie
anoniem Geplaatst: 22 juli 2003 Auteur Delen Geplaatst: 22 juli 2003 [quote:6bf3c308e6]Nee, volgens mij programmeer je in een taal (Java) en dan eventueel voor een OS (Windows?).[/quote:6bf3c308e6] In Java kun je de Win32 of POSIX API niet direct aanspreken. :roll: Quote Link naar reactie
anoniem Geplaatst: 24 juli 2003 Auteur Delen Geplaatst: 24 juli 2003 :lol: JAVA produceert bytecode en die wordt omgezet naar platformafhankelijke code. JAVA zelf is dus platformonafhankelijk en om dit te bereiken kun je dus nooit bij de API ;) Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen