Hoi hoi.
Ik heb voor een klant de opdracht om een chat systeem te maken, met PHP. Nu weet ik best wel dat Http niet bepaald bedoelt is om een chat systeem op te basseren. Maar op de servers van de klant (shared) kan ik helaas niets op installeren.
Anders kon ik voor een wat minder spartaanse oplossing kiezen.
Nu heb je met Http/Php een beetje twee mogelijkheden voor zo ver ik weet.
- Pollen elke seconde (of minder) kijken of er wat nieuws is. (Ajax)
- Verbinding open laten staan. Als in, via een iFrame een 'pagina' laden die nooit stopt. En daar bij de events een '<script>' tag uitspugen welke direct door de browser wordt opgepakt.
- Iets anders? (Zonder extra software te installeren, het gaat hier enkel om Apache/PHP)
Nu vroeg ik me af, wat is performancewise beter? Pollen lijkt me een waste of bandwith, aangezien je de helft van de tijd geen updates krijgt, en er toch om vraagt. Een enkele client maakt dan laten we zeggen 60 requests per minuut.
Of de verbinding open laten staan, dit heeft als voordeel dat er net wat 'snappier' gereageert kan worden, immers zo snel er wat nieuws is op de server kan er meteen 'gepushed' worden naar de clients. En hoeft er niet eerst gewacht te worden tot de client zelf het inititiatief neemt om te kijken of er data is.
-----------
Mij lijkt de verbinding open laten staan een betere optie, omdat die in bandbreedte scheelt, en nog wat 'sneller' aan gaat voelen. Het nadeel van deze techniek is dat de browser constant een 'laden' icoontje blijft weergeven.
Omdat wanneer de verbindingen open blijven staan, de database verbindingen ook open blijven staan dat lijkt mij de grootste bottleneck (daarna) wordt zat ik te kijken hoe ik dat kan afvangen.
Nu dacht ik er aan om ipv dat elke client de database bekijkt om te kijken of er nieuwe berichten zijn er maar een enkele client is die dat doet, en de nieuwe resultaten in memcache duwt. Dan blijft er eigenlijk maar constant een enkele db connectie over al de clients openen.
(Voor dit moet ik dan wat verzinnen dat ik weet wanneer een client al als 'db connectie' speelt dat de rest dat niet meer doet. En wanneer deze weggaat (als in kruisje, internet valt weg) dat een andere client het overneemt. (Enig idee hoe ik dat kan uitwerken?)
Alle andere clients halen de nieuwste informatie uit de memcache.
-------
Is dat 'de beste manier' om via http/php/mysql een chat op te kunnen bouwen? (Welke een 'redelijke' groep gebruikers aan kan?)
-------
Ps, graag NIET reageren met PHP is daar niet geschikt voor, pleur een 'app-x' op de server welke daar veel beter geschikt voor is. Er draait enkel PHP/Apache op (dus bijvoorbeeld APE of een andere Comet applicatie welke softwarewijzigingen op de server vereist is geen optie.)
Het enige wat ik wil weten wat is de beste manier om via PHP/Javascript een chat op te zetten.
Ik heb voor een klant de opdracht om een chat systeem te maken, met PHP. Nu weet ik best wel dat Http niet bepaald bedoelt is om een chat systeem op te basseren. Maar op de servers van de klant (shared) kan ik helaas niets op installeren.
Anders kon ik voor een wat minder spartaanse oplossing kiezen.
Nu heb je met Http/Php een beetje twee mogelijkheden voor zo ver ik weet.
- Pollen elke seconde (of minder) kijken of er wat nieuws is. (Ajax)
- Verbinding open laten staan. Als in, via een iFrame een 'pagina' laden die nooit stopt. En daar bij de events een '<script>' tag uitspugen welke direct door de browser wordt opgepakt.
- Iets anders? (Zonder extra software te installeren, het gaat hier enkel om Apache/PHP)
Nu vroeg ik me af, wat is performancewise beter? Pollen lijkt me een waste of bandwith, aangezien je de helft van de tijd geen updates krijgt, en er toch om vraagt. Een enkele client maakt dan laten we zeggen 60 requests per minuut.
Of de verbinding open laten staan, dit heeft als voordeel dat er net wat 'snappier' gereageert kan worden, immers zo snel er wat nieuws is op de server kan er meteen 'gepushed' worden naar de clients. En hoeft er niet eerst gewacht te worden tot de client zelf het inititiatief neemt om te kijken of er data is.
-----------
Mij lijkt de verbinding open laten staan een betere optie, omdat die in bandbreedte scheelt, en nog wat 'sneller' aan gaat voelen. Het nadeel van deze techniek is dat de browser constant een 'laden' icoontje blijft weergeven.
Omdat wanneer de verbindingen open blijven staan, de database verbindingen ook open blijven staan dat lijkt mij de grootste bottleneck (daarna) wordt zat ik te kijken hoe ik dat kan afvangen.
Nu dacht ik er aan om ipv dat elke client de database bekijkt om te kijken of er nieuwe berichten zijn er maar een enkele client is die dat doet, en de nieuwe resultaten in memcache duwt. Dan blijft er eigenlijk maar constant een enkele db connectie over al de clients openen.
(Voor dit moet ik dan wat verzinnen dat ik weet wanneer een client al als 'db connectie' speelt dat de rest dat niet meer doet. En wanneer deze weggaat (als in kruisje, internet valt weg) dat een andere client het overneemt. (Enig idee hoe ik dat kan uitwerken?)
Alle andere clients halen de nieuwste informatie uit de memcache.
-------
Is dat 'de beste manier' om via http/php/mysql een chat op te kunnen bouwen? (Welke een 'redelijke' groep gebruikers aan kan?)
-------
Ps, graag NIET reageren met PHP is daar niet geschikt voor, pleur een 'app-x' op de server welke daar veel beter geschikt voor is. Er draait enkel PHP/Apache op (dus bijvoorbeeld APE of een andere Comet applicatie welke softwarewijzigingen op de server vereist is geen optie.)
Het enige wat ik wil weten wat is de beste manier om via PHP/Javascript een chat op te zetten.