Ik wil een website maken waarbij gebruikers tegelijkertijd online zijn.
De communicatie tussen deze gebruikers kan je volgens mij goed vergelijken met een chat, maar dat is het niet.
Het doel is dus dat een gebruiker data naar de server zend en nadat de server de data gecontroleerd heeft, deze het aan 1 of meerdere gebruikers door te sturen.
De website mag geen complete flash of Java-applicatie in de browser laden, omdat het grootste gedeelte van de code uit HTML en JavaScript bestaat. De ene gebruiker kan namelijk de content in de browser van de andere gebruiker aanpassen. Het HTML en JavaScript voor de verzender en ontvanger werkt prima, maar alleen de communicatie naar de server werkt niet zoals ik wil.
Bij het zoeken van voorbeelden voor communicatie (o.a. chats) en zelf heel wat testwerk gedaan te hebben stuit ik op een aantal problemen.
De meeste chatscripts (zonder flash en Java) die ik heb gevonden werken met AJAX die continu naar de server pollen. Dit gaat enorm veel dataverkeer kosten.
Stel dat er 20 gebruikers continu online zijn en 512 byte aan pakketten per seconde op de server afvuren, is dat dan 20 x 512 x 60 x 60 = bijna 37 MB per uur! (Ruim 27 GB per maand)
Dit dataverkeer is veel te veel, en natuurlijk verwacht ik overdag toch meer dan 20 gebruikers om m'n site te hebben.
Die AJAX techniek om te pollen is dus geen optie.
Als een gebruiker data heeft verstuurd zou dit binnen 1 seconde ( het liefst real-time) op het scherm van de andere gebruiker komen te staan. Om dit te realiseren zou de browser dus een verbinding constant open moeten houden waarbij de server op het juiste moment data kan versturen.
Nu heb ik al wat geëxperimenteerd:
De zender verstuurt wat data naar de server, en het php-script wat er achter zit zet die data in een MySQL database. Een ander php-script, wat door elke ontvanger wordt aangeroepen, kijkt constant naar de database of er data is, en als die data er is wordt dit verzonden naar de ontvanger.
Nu heb ik het pollen verplaatst van de het dataverkeer naar de server zelf. Maar ik vind het niet zo'n goed idee om continu een query op die database los te laten. Als ik 20 ontvangers heb, staan er dus 20 van deze scripts te runnen die elke keer een query op die database afvuurt.
Dit kost natuurlijk heel veel processortijd (en harde schijf?!?) en ik zoek nu een manier om i.p.v. te pollen dit met een event te doen zodat die processortijd beperkt blijft.
Kent iemand een of andere techniek die die processortijd beperkt en waarbij de gebruiker "real-time" de data binnenkrijgt?
De communicatie tussen deze gebruikers kan je volgens mij goed vergelijken met een chat, maar dat is het niet.
Het doel is dus dat een gebruiker data naar de server zend en nadat de server de data gecontroleerd heeft, deze het aan 1 of meerdere gebruikers door te sturen.
De website mag geen complete flash of Java-applicatie in de browser laden, omdat het grootste gedeelte van de code uit HTML en JavaScript bestaat. De ene gebruiker kan namelijk de content in de browser van de andere gebruiker aanpassen. Het HTML en JavaScript voor de verzender en ontvanger werkt prima, maar alleen de communicatie naar de server werkt niet zoals ik wil.
Bij het zoeken van voorbeelden voor communicatie (o.a. chats) en zelf heel wat testwerk gedaan te hebben stuit ik op een aantal problemen.
De meeste chatscripts (zonder flash en Java) die ik heb gevonden werken met AJAX die continu naar de server pollen. Dit gaat enorm veel dataverkeer kosten.
Stel dat er 20 gebruikers continu online zijn en 512 byte aan pakketten per seconde op de server afvuren, is dat dan 20 x 512 x 60 x 60 = bijna 37 MB per uur! (Ruim 27 GB per maand)
Dit dataverkeer is veel te veel, en natuurlijk verwacht ik overdag toch meer dan 20 gebruikers om m'n site te hebben.
Als een gebruiker data heeft verstuurd zou dit binnen 1 seconde ( het liefst real-time) op het scherm van de andere gebruiker komen te staan. Om dit te realiseren zou de browser dus een verbinding constant open moeten houden waarbij de server op het juiste moment data kan versturen.
Nu heb ik al wat geëxperimenteerd:
De zender verstuurt wat data naar de server, en het php-script wat er achter zit zet die data in een MySQL database. Een ander php-script, wat door elke ontvanger wordt aangeroepen, kijkt constant naar de database of er data is, en als die data er is wordt dit verzonden naar de ontvanger.
Nu heb ik het pollen verplaatst van de het dataverkeer naar de server zelf. Maar ik vind het niet zo'n goed idee om continu een query op die database los te laten. Als ik 20 ontvangers heb, staan er dus 20 van deze scripts te runnen die elke keer een query op die database afvuurt.
Dit kost natuurlijk heel veel processortijd (en harde schijf?!?) en ik zoek nu een manier om i.p.v. te pollen dit met een event te doen zodat die processortijd beperkt blijft.
Kent iemand een of andere techniek die die processortijd beperkt en waarbij de gebruiker "real-time" de data binnenkrijgt?
Speel ook Balls Connect en Repeat