Even vooraf: ik ben van origine geen web programmeur en daarom ook niet helemaal op de hoogte van de latest & greatest web technologiën. Vandaar dat ik deze vraag even bij jullie neerleg, om zo advies en ideeën op te doen.
Ik ben bezig met een project waarbij een flink aantal clients (say, >10.000, maar in principe moet het oneindig schaalbaar worden) d.m.v een HTTP request bij een server moeten vragen of zij een bepaalde actie moeten
uitvoeren. Om de delay zo klein mogelijk te houden en de server niet te overbelasten met een constante HTTP requests, heb ik bedacht om de HTTP request 'open' te houden totdat er daadwerkelijk vanaf de server data is om terug te sturen. Nu blijkt dat meerdere mensen dit idee al hadden en het voor zover ik weet long-polling hebben genoemd
Nu zijn er bij mij wat onduidelijkheden over de server implementatie hiervan, en hoe dit in de praktijk gedaan wordt. De onduidelijkheden zitten voornamelijk in het feit hoe de server de requests gaat afhandelen. Bij een standaard Apache+PHP installatie wordt er voor elke request een nieuwe thread gestart. Als er dus 1000 clients een HTTP request open hebben staan, draaien er dus 1000 threads. Geef al deze threads een stack van 4MB + wat overhead, en bij elkaar ben je zo 5GB aan geheugen kwijt. Klopt dit, of zie ik hier iets over het hoofd? Voor mijn gevoel is dit hartstikke inefficiënt, vooral omdat 99% van de requests de komende uren geen data gaan ontvangen, compleet idle zijn dus.
Je zou ook voor een webserver met een ander threading model (Nginx bijvoorbeeld?) welke niet voor elk request een aparte thread start. Echter is het mij niet helemaal duidelijk hoe Nginx andere requests gaat afhandelen als 1 request aan het blocken is (stel, even heel dom, we zetten een sleep() in een php script).
Gelet op het voorgaande zoek ik dus eigenlijk iets event-driven.
Kunnen jullie mij even wat schoppen in de goede richting geven v.w.b de common practices bij long-polling? Misschien overbodig, maar web-sockets etc hebben niet de voorkeur. Ook is de client een heel simpel embedded bordje en ondersteund bijvoorbeeld geen Java, .Net, of andere 'enterprisy' frameworks.
edit: Ik geloof dat ik zojuist het nut van Node.js heb ontdekt... Nog meer methoden om efficient long-polling toe te passen, behalve het helemaal zelf op de server te gaan implementeren in [insert taal]?
Ik ben bezig met een project waarbij een flink aantal clients (say, >10.000, maar in principe moet het oneindig schaalbaar worden) d.m.v een HTTP request bij een server moeten vragen of zij een bepaalde actie moeten
uitvoeren. Om de delay zo klein mogelijk te houden en de server niet te overbelasten met een constante HTTP requests, heb ik bedacht om de HTTP request 'open' te houden totdat er daadwerkelijk vanaf de server data is om terug te sturen. Nu blijkt dat meerdere mensen dit idee al hadden en het voor zover ik weet long-polling hebben genoemd
Nu zijn er bij mij wat onduidelijkheden over de server implementatie hiervan, en hoe dit in de praktijk gedaan wordt. De onduidelijkheden zitten voornamelijk in het feit hoe de server de requests gaat afhandelen. Bij een standaard Apache+PHP installatie wordt er voor elke request een nieuwe thread gestart. Als er dus 1000 clients een HTTP request open hebben staan, draaien er dus 1000 threads. Geef al deze threads een stack van 4MB + wat overhead, en bij elkaar ben je zo 5GB aan geheugen kwijt. Klopt dit, of zie ik hier iets over het hoofd? Voor mijn gevoel is dit hartstikke inefficiënt, vooral omdat 99% van de requests de komende uren geen data gaan ontvangen, compleet idle zijn dus.
Je zou ook voor een webserver met een ander threading model (Nginx bijvoorbeeld?) welke niet voor elk request een aparte thread start. Echter is het mij niet helemaal duidelijk hoe Nginx andere requests gaat afhandelen als 1 request aan het blocken is (stel, even heel dom, we zetten een sleep() in een php script).
Gelet op het voorgaande zoek ik dus eigenlijk iets event-driven.
Kunnen jullie mij even wat schoppen in de goede richting geven v.w.b de common practices bij long-polling? Misschien overbodig, maar web-sockets etc hebben niet de voorkeur. Ook is de client een heel simpel embedded bordje en ondersteund bijvoorbeeld geen Java, .Net, of andere 'enterprisy' frameworks.
edit: Ik geloof dat ik zojuist het nut van Node.js heb ontdekt... Nog meer methoden om efficient long-polling toe te passen, behalve het helemaal zelf op de server te gaan implementeren in [insert taal]?
[ Voor 4% gewijzigd door EddoH op 03-06-2014 10:35 ]