In mijn zoektocht een mooie, snelle (no-fancy-bullshit) chat oplossing voor op een website te zetten, zie ik weinig opties, en de enige die ik dan me zou kunnen bedenken is.. We maken het zelf.
Persoonlijk vind ik een kale installatie van mIRC het prettigste werken, en ben ik al een beetje aan het spelen met hoe het op het scherm moet komen. De lay-out is het probleem niet, echter wel hoe het gemaakt wordt.
Kleine, niet onbelangrijke, sitenote: Ik ken weinig PHP, en javascript jat ik meestal van anderen (beter goed gejat dan slecht bedacht), en MySQL... daar waag ik me nog niet aan.
Het moet dus een chat worden waar dus ook de joins & parts (wat dus een quit gaat worden) e.d. in zitten, nick-changes, kicks/bans, kortom... IRC via AJAX.
Voordat ik het e.e.a. ga opbouwen (jatten), wil ik dus graag jullie mening over de werking achter de schermen (in iedergeval het PHP traject)
Voor de werking zat ik aan het volgende te denken:
Op de pagina van de chatroom, moet je een nickname ingeven, en met PHP genereer ik een unieke key die in de POST wordt meegestuurd.
Server-Side zal de unieke gebruikt worden voor 2 flatfiles, 1 waar de nickname in staat, en een buffer:
$key.name & $key.buffer
Op het moment dat een gebruiker iets verstuurd (hetzij tekst voor op de chat, of hetzij een ping-pong), zal de $key.name worden aangepast, en daardoor wordt de laatste gewijzigde datum veranderd.
Zodra iemand iets typt naar de room, is de bedoeling dat PHP het volgende gaat doen:
Kijk naar ALLE .name bestanden:
De huidige tijd minus de lastmod tijd van het .name bestand geeft een waarde, als deze waarde groter is dan de interval, is er een gebruiker weggegaan. Op dat moment kan de .name en .buffer van die user verwijderd worden.
Is waarde kleiner dan de interval, dan is de gebruiker er dus nog. Dan kan de verstuurde tekst dus bij de .buffer worden gezet.
Met de interval trek ik dus elke keer $key.buffer leeg (en wis deze van schijf), en update ik de $key.name. Op die manier vul je het scherm enkel met verse data..
Ik hoor overigens diverse 'klachten' dat AJAX traag is, maar dat komt door het feit dat de te versturen data eerst richting server-side gaat, en daarna pas op het scherm verschijnt. Met een interval van 1 seconde lijkt het dus traag, die snap ik. Op het moment dat je dus met apparte bestanden werkt per gebruiker een eigen buffer, hoef je je eigen buffer niet te vullen, en kan je die met javascript direct in het venster gooien. Hierdoor lijkt het dus real-time, zonder traagheid.
Aangezien ik weinig kennis heb van PHP, zal me de serverside kant wel lukken om te bouwen, het javascript verhaal zal flink wat copy'n'paste werk worden, maar daar kom ik ook wel uit.
Naar mijn idee heb ik op deze manier een prima IRC-like chatroom, zonder dat het 'traag' lijkt te zijn.
Zitten aan mijn denkwijze nog rare ogen en haken of valkuilen waar ik rekening mee moet gaan houden?
Brakke pic ter illustratie:
Persoonlijk vind ik een kale installatie van mIRC het prettigste werken, en ben ik al een beetje aan het spelen met hoe het op het scherm moet komen. De lay-out is het probleem niet, echter wel hoe het gemaakt wordt.
Kleine, niet onbelangrijke, sitenote: Ik ken weinig PHP, en javascript jat ik meestal van anderen (beter goed gejat dan slecht bedacht), en MySQL... daar waag ik me nog niet aan.
Het moet dus een chat worden waar dus ook de joins & parts (wat dus een quit gaat worden) e.d. in zitten, nick-changes, kicks/bans, kortom... IRC via AJAX.
Voordat ik het e.e.a. ga opbouwen (jatten), wil ik dus graag jullie mening over de werking achter de schermen (in iedergeval het PHP traject)
Voor de werking zat ik aan het volgende te denken:
Op de pagina van de chatroom, moet je een nickname ingeven, en met PHP genereer ik een unieke key die in de POST wordt meegestuurd.
Server-Side zal de unieke gebruikt worden voor 2 flatfiles, 1 waar de nickname in staat, en een buffer:
$key.name & $key.buffer
Op het moment dat een gebruiker iets verstuurd (hetzij tekst voor op de chat, of hetzij een ping-pong), zal de $key.name worden aangepast, en daardoor wordt de laatste gewijzigde datum veranderd.
Zodra iemand iets typt naar de room, is de bedoeling dat PHP het volgende gaat doen:
Kijk naar ALLE .name bestanden:
De huidige tijd minus de lastmod tijd van het .name bestand geeft een waarde, als deze waarde groter is dan de interval, is er een gebruiker weggegaan. Op dat moment kan de .name en .buffer van die user verwijderd worden.
Is waarde kleiner dan de interval, dan is de gebruiker er dus nog. Dan kan de verstuurde tekst dus bij de .buffer worden gezet.
Met de interval trek ik dus elke keer $key.buffer leeg (en wis deze van schijf), en update ik de $key.name. Op die manier vul je het scherm enkel met verse data..
Ik hoor overigens diverse 'klachten' dat AJAX traag is, maar dat komt door het feit dat de te versturen data eerst richting server-side gaat, en daarna pas op het scherm verschijnt. Met een interval van 1 seconde lijkt het dus traag, die snap ik. Op het moment dat je dus met apparte bestanden werkt per gebruiker een eigen buffer, hoef je je eigen buffer niet te vullen, en kan je die met javascript direct in het venster gooien. Hierdoor lijkt het dus real-time, zonder traagheid.
Aangezien ik weinig kennis heb van PHP, zal me de serverside kant wel lukken om te bouwen, het javascript verhaal zal flink wat copy'n'paste werk worden, maar daar kom ik ook wel uit.
Naar mijn idee heb ik op deze manier een prima IRC-like chatroom, zonder dat het 'traag' lijkt te zijn.
Zitten aan mijn denkwijze nog rare ogen en haken of valkuilen waar ik rekening mee moet gaan houden?
Brakke pic ter illustratie:
Ey!! Macarena \o/