Ga naar inhoud

[Java] Controleren of een Socket nog "leeft" (poll


Aanbevolen berichten

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?
Link naar reactie
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.
Link naar reactie
[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...
Link naar reactie
[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.
Link naar reactie
[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 :)
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...