Mitäs tekniikoita on nykyisellään html5/javascript/muut? jos haluaisi esim. lähettää viestin tai tilamuutoksen palvelimelta päin KAIKKIIN sivustolla juuri sillä hetkellä oleviin asiakkaisiin ?
Eli jos ohjelman tila x muuttuu y:ksi, niin käyttäjät saavat siitä ilmoituksen ja heidän sivu päivittyy, ilman että käyttäjän javascript koko ajan "pollaa" palvelinta manuaalisesti esim. ajaxilla..
nimim. termit hukassa
Voi joko ”pollata” tai yhdistää palvelimeen WebSocketilla (tai vanhanaikaisemmin Java-appletilla tai Flashilla). Pollaamisesta seuraa suuri määrä pitkäkestoisia HTTP-pyyntöjä, jotka tukkivat palvelimen, tai massiivinen määrä lyhyitä HTTP-pyyntöjä, jotka tukkivat palvelimen, tai viive, jos tehdään lyhyitä pyyntöjä harvakseltaan. Jatkuvan yhteyden ongelma on, että että jokainen asiakas kuluttaa jatkuvasti palvelimen resursseja tyhjäkäynnilläkin, mikä osaltaan rajoittaa merkittävästi asiakkaiden määrää. WebSocket myös puuttuu vielä monista selaimista ja useimmista palvelimista.
Miksi pitkäkestoiset HTTP-pyynnöt tukkivat palvelimen? Eikö tämä ole paljolti kiinni siitä, miten palvelinpään softa on toteutettu. Aiheesta esim täällä http://nginx.com/blog/http-keepalives-and-web-performance/
Joka tapauksessa jos on miljoonia yhtäaikaisia käyttäjiä palvelulla, niin saattaa joutua investoimaan useampaan kuin yhteen palvelimeen. Mielestäni jos vaikkapa pelipalvelin pystyisi hoitamaan puolen miljoonaa asiakasta, niin se olisi jo aika hyvin ja pullonkaulaksi ehkä tulisi muut asiat kuin yhteyksien määrä.
Grez kirjoitti:
Miksi pitkäkestoiset HTTP-pyynnöt tukkivat palvelimen? Eikö tämä ole paljolti kiinni siitä, miten palvelinpään softa on toteutettu. Aiheesta esim täällä - -
Keep-alive on aivan eri asia kuin aktiivinen HTTP-pyyntö. Keep-alive vie vain yhden socketin, mutta siihen ei (vielä) voi palvelinpuolelta syöttää dataa. Aktiivinen pyyntö* vie yleensä kokonaisen säikeen tai prosessin eli huomattavasti enemmän muistia.
*) Esim. PHP:llä while (!dataa()) sleep(1);
En toki sano, etteikö voisi toteuttaa omaa HTTP-palvelinta, jolla olisi pollaamiseen jokin spesiaalimekanismi, vaikka X-Poll-otsikko, jonka kanssa pyyntö pysähtyisi jo HTTP-palvelimen puolella keep-alive-tyyppiseen tilaan odottamaan, että dataa on tarjolla. Tätä ei kuitenkaan ehkä kysytty.
Metabolix kirjoitti:
Keep-alive on aivan eri asia kuin aktiivinen HTTP-pyyntö.
Tiedän että se on eri asia, mutta nimenomaan pointtini olikin että ne pitkäkestoiset pyynnöt ei sinäänsä tuki palvelinta vaan jokin muu juttu tai sitten vaikka niiden huono toteutus.
Älykkäästi toteutettu pitkäkestoisia HTTP-yhteyksiä ylläpitävä palvelinratkaisu järkevästi toteutettuna olisi ainakin omasta mielestäni jopa melko kevyt ja tehokas ratkaisu kysyttyyn ongelmaan.
Toki jos haluaa käyttää vaikka Apachea ja PHP:tä niin sitten tuota kuormitusta alkaa tulla. Mutta tässähän tosiaan kysyttiin mitä tekniikoita on tarjolla, ei millä tekniikoilla se on huono toteuttaa :D
Kiitos vastauksista!
Entäs webhooks ?
Juurikin em. pollausta haluaisin välttää koska oletan että parempikin tapa on olemassa.
Onhan puhelinvalmistajillakin push-messaget ym. mutta ne ei toki toimi sitten työpöytäkäytössä ts. universaalisti selaimessa
”Entäs [satunnainen sana, jonka löysin netistä]?”
Ei.
Oletko yhtään yrittänyt itse selvittää vaikka Wikipediasta?
eikös sitä streamiä nyt voi tehdä vaikka node-js:llä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.