Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[taal?] webbased chat applicatie

Pagina: 1
Acties:

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 30-10 12:53

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ik heb enigszins ruime ervaring met PHP, echter ben ik van mening dat PHP niet enorm geschikt is voor een webbased chat applicatie. Dit is puur een gedachte gebaseerd op enkele ervaringen met het "pushen/pullen" van data middels PHP. Technisch gezien is alles zeer goed mogelijk, alleen vereist dat wel een interval van zo'n 1-2 seconden dat een client elke keer zit te pokken naar de server. Nu kan ik ook wel met sockets werken in PHP, alleen word dat weer een leuke 'while' en blijf je met het feit dat je client niet efficiënt is.

Nu is dus de vraag; kun je toch een chat applicatie maken middels PHP/jquery/Json/ajax w/e dat redelijk robuust is en enigszins efficiënt? Vooral als de applicatie gaat groeien en er op een gegeven moment vele users gebruik van maken? Het is niet dat ik het niet "kan", en in een zekere zin weet ik dat het ook redelijk solide kan zijn, echter heb ik geen idee over het gebruik van de resources e.d.

En dan twee; wat zou volgens jou dan wel een goede 'fundering' zijn voor zo'n chat? Welke taal en middelen zou jij dan gaan gebruiken?


Dan nog als laatste; qua server zit het wel prima, ook als er iets specifieks op moet komen aan software. Betreffende mijn ervaring met andere talen zit het wat minder snor. Ik kan redelijk mijn weg vinden met C++ en C#, .NET e.d maar uiteindelijk moet ik dan wel redelijk argumenten hebben om meer tijd kwijt te zijn om zoiets in een andere taal te gaan ontwikkelen.

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Bij een chatapplicatie nooit ajax polling gebruiken, dat sloopt je schaalbaarheid enorm.

Ik denk dat jij opzoek bent naar een web socket. Een paar bekende zijn bv SignalR of Socket.IO.

De backend maakt dan opzich niet zoveel uit, ik heb een realtime chat draaien met SignalR waarbij de berichten gecached worden in het geheugen en delayed worden geschreven naar een database om deze te ontlasten.
alleen word dat weer een leuke 'while' en blijf je met het feit dat je client niet efficiënt is.
Dit ongaat me een beetje, ja je zal een server moeten hebben met een while loop (je kan ook Node.JS oid gebruiken), dit is immers bij zo'n beetje elke server. SignalR gebruikt daarintegen weer events op je Hub zodat je deze loop niet zelf hoeft te beheren.

Maar waarom zou de client niet efficiënt zijn? Het is juist enorm efficiënt omdat deze alleen dingen doet als het moet (plus je zal over de lange termijn bandbreedte besparen).

[ Voor 40% gewijzigd door Megamind op 25-02-2014 19:47 ]


  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 30-10 12:53

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ter voorbeeld hoe je dat met PHP zou moeten doen is;

code:
1
2
3
4
5
6
while(fgets($this->socket, 128))
{
//etc
//en dan een flush om je data eruit te gooien.
flush();
}


Voor zowel client als server is dit niet echt geweldig. Puur vanwege het feit dat je niet echt <-- --> verkeer hebt en alles er "vies" uitgooit. Zover ik weet kun je het niet echt anders doen met sockets in PHP.

Overigens bedankt voor wat namen die je hebt opgegooid :)

  • Niet Henk
  • Registratie: Oktober 2010
  • Laatst online: 23-10 06:46
Je kan proberen voor HTML5 SSE te gaan in combinatie met PHP. Dat is i.i.g. beter dan ajax pullen. Alleen dan heb je alsnog een ajax pull fallback nodig indien de browser dit niet ondersteund.

Je PHP code ziet er wel logisch uit. Je zou zowel client-side als server-side een reconnect om de zoveel tijd willen doen, als je dat wilt.

Verwijderd

Douweegbertje schreef op dinsdag 25 februari 2014 @ 20:01:
Ter voorbeeld hoe je dat met PHP zou moeten doen is;

code:
1
2
3
4
5
6
while(fgets($this->socket, 128))
{
//etc
//en dan een flush om je data eruit te gooien.
flush();
}


Voor zowel client als server is dit niet echt geweldig. Puur vanwege het feit dat je niet echt <-- --> verkeer hebt en alles er "vies" uitgooit. Zover ik weet kun je het niet echt anders doen met sockets in PHP.

Overigens bedankt voor wat namen die je hebt opgegooid :)
Dit is op zich wel interessant: https://code.google.com/p/phpwebsocket/
Volgens mij wordt dit niet meer actief onderhouden. Maar is wel relatief simpel te gebruiken en werkt goed.

  • NLChris
  • Registratie: Juli 2004
  • Laatst online: 19:05
Volgens mij is http://socketo.me/ de meest volwassen WebSocket server voor PHP. Zelf heb ik ook web server geschreven: http://github.com/Devristo/phpws . Maar zoals gezegd de eerste is beter getest.

  • Pizzalucht
  • Registratie: Januari 2011
  • Laatst online: 23:19

Pizzalucht

Snotneus.

Voor een chatapp zou ik een kiezen voor node (met socket.io as websocket/fallback library) en waarschijnlijk mongodb als je persistancy in je chat wilt hebben (history, register/login, etc...).

Een basic chat heb je in node zo in elkaar zitten en de hostingmogelijkheden worden ook steeds groter.

  • Cartman!
  • Registratie: April 2000
  • Niet online
Qua Node.JS sluit ik me aan bij de rest maar zou kiezen voor SockJS ipv. socket.io omdat we hier qua performance betere ervaringen mee hebben. Verder zou ik Redis gebruiken als storage, bloedsnel, vrij simpel om mee te beginnen en enorm schaalbaar.

Als het als proof of concept is kun je best PHP gebruiken maar als het iets is voor in productie raad ik het je echt hard af.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Online browser game met ingame chat kwam laatst nog voorbij en daar wordt een aantal van je vragen ook al in beantwoord.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 30-10 12:53

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
NMe schreef op dinsdag 25 februari 2014 @ 21:57:
Online browser game met ingame chat kwam laatst nog voorbij en daar wordt een aantal van je vragen ook al in beantwoord.
Hm ja dat vind ik wel meevallen. Ik was echt op zoek naar ervaringen middels een ajax/json based chat app met PHP en de performance ervan in "echt" gebruik.

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 21-11 15:31

TheNephilim

Wtfuzzle

Met http://pusher.com/ kun je zoiets maken en ook http://ape-project.org/ (moet je zelf installeren) kan je hiermee helpen.

  • Cartman!
  • Registratie: April 2000
  • Niet online
Douweegbertje schreef op woensdag 26 februari 2014 @ 08:50:
[...]


Hm ja dat vind ik wel meevallen. Ik was echt op zoek naar ervaringen middels een ajax/json based chat app met PHP en de performance ervan in "echt" gebruik.
Drama dus :)

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Longpolling of ajax push. Zoals eerder genoemd is http://ape-project.org/ een goed voorbeeld.

Om dat te laten schalen zal je de messages niet simpelweg in mysql moeten zetten, want daar krijg je dan natuurlijk onwijs veel reads.

Als je niet vies bent van php-extensies installeren dan kan je ook een kijkje nemen in zeromq. Of een queue daemon zoals RabbitMQ.

Anders zul je (als je het in php moet doen) een centrale server (daemon) moeten maken (Zie socket_ functies). Daarna zullen je long pollers moeten verbinden naar die server om messages op te halen, die bij ontvangst direct naar de client gestuurd kunnen worden, zonder 100+ poll requests.

De reden dat dit schaalt (tot op zekere hoogte) is dat de "long poll" processen bijna geen resources kosten omdat ze op de stocket blocken. Bij een normale poll worden er vaak veel overbodige requests gestuurd.

PS: De webchat van facebook is ook in php geschreven :)

[ Voor 3% gewijzigd door ReenL op 27-02-2014 21:27 ]


  • Vinze
  • Registratie: Augustus 2006
  • Laatst online: 20-11 10:29
Ik ben erg te spreken over Node.js + Socket.io, ontzettend eenvoudig om te leren en het schaalt goed mee. Een chat app heb je binnen no-time in elkaar geknutseld, en er zijn heel veel tutorials te vinden.
Pagina: 1