Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: chat-ohjelma

Sivun loppuun

E.K.Virtanen [13.07.2008 11:53:42]

#

Terve.

Nyt voi tulla tyhmääkin kysymystä, pahoitteluni tästä. php koodin tekeminen onnistuu kohtuullisesti mutta muuten tuo maailma on kohtuullisen hukassa.

Eli olen tehnyt yksinkertaisen chat-ohjelman käyttäen hyväksi putkastakin löytyviä vinkkejä.
Eli aina kun tulee uusi viesti, se talletetaan viestit. txt tiedostoon. Viestit tuosta tiedostosta tulostetaan parin sekunnin välein omaan iframeensa.

Nyt kun kavereiden kanssa innostutaan joka kaunis perjantai tuota koodia pikkuhumalassa käyttämään niin siinä saattaa olla reilut kymmenen ihmistä paikalla.

1. Kuinka paljon tuollainen kuormittaa, jos tosiaan on vaikka kymmenen ihmistä paikalla? Kun päivitystahti on 2s niin keskiarvolta 0.2s välein siis ajetaan funktiota joka lähettää päivitetyn viestit.txt jollekin paikalla olijalle.

2. Ilmeisesti ei phpllä onnistu niin että mikäli ei ole viestit lisääntyneet viimeisen päivittämisen jälkeen niin sitten ei päivitetä? Nyt päivitys "ohjataan" näin

echo "<meta http-equiv=\"refresh\" content=\"2\">";

3. Kaistaahan tuollainen päivittäminen ei juurikaan vie, kun rivejä tulostetaan 20 uusinta? Rivin maksimipituus on kuitenkin 160 merkkiä?

E.K.Virtanen

ajv [13.07.2008 13:03:08]

#

1. Sanoisin, että prosarin kuormitusviisari ei juuri värähdä tuollaisesta.
3. - | | - kaistan kuormitusviisari - | | -
2. Ei

E.K.Virtanen [13.07.2008 13:09:43]

#

Näin ajattelinkin mutta piti kysyä ettei tule tehtyä tyhmyyksiä.

Kiitoksia ajv.

Grez [13.07.2008 14:32:23]

#

Perinteine tapa tehdä www-chat on tämä, että laitetaan selain hakemaan sivua, jota sitten ladataan rivi kerrallaan. Sinänsähän moinen tapa on aikamoinen viritys, mutta hyvä puoli siinä on, ettei kaistaa mene hukkaan. Nykyaikainen tapa voisi olla hakea uusia rivejä Ajaxilla.

Sinänsä tässä tapauksessa asialla ei varmaan ole mitään väliä, mutta meneehän tuossa kaistaa hukkaan kun samat rivit haetaan 2s välein koko ajan uudestaan (siis olettaen ettei tekstiä kirjoitella 10riviä/s vauhtia koko ajan)

E.K.Virtanen [13.07.2008 14:39:31]

#

Terve Grez.

Tosiaan tuota phptä osaan sikseen väännellä että yksinkertainen "chat" onnistuu. Idea on että kävijän koneella ei ajeta mitään ylimääräistä ja kaikkia java virityksiä vältellään vaikka purkkakoodin voimalla.

Kyse on kuitenkin muutaman henkilön chatistä jossa ollaan kun jaksetaan. Tämähän ei kuluta "turhaa" kaistaa siinä mielessä että jos chatissä ei ole ketään paikalla niin silloin ei ole selainta mitä päivittää.

Voisihan jotain purkkaa miettiä että jos esim. on hiljaista niin tuo päivitys vauhti putoaa? Esim. jos viimeisestä viestistä on >30s niin

echo "<meta http-equiv=\"refresh\" content=\"2\">";

muuttuukin

echo "<meta http-equiv=\"refresh\" content=\"5\">";

Vai meneekö tuo sitten jo turhankin purkaksi? Ideoita otan mielelläni kun täällä kuitenkin on tässä asiassa minua monta kertaa fiksumpaa porukkaa :)

Grez [13.07.2008 14:47:14]

#

Siis kuten sanoin, niin tuolla kaistan kulutuksella ei tässä tapauksessa ole varmastikaan mitään merkitystä.

Totesin vaan yleisesti, että jos olisi isosta järjestelmästä kysymys (vaikka 10000 käyttäjää) niin tuo tapa kuluttaisi kaistaa hukkaan. Toisaalta ainakin itse tykkään jos chatissa voi skrollata enemmänkin taakse päin kuin 20 riviä. Tässä tapauksessa esim. Ajaxilla uusien rivien hakeminen ja lisääminen loppuun (tai alkuun) voisi olla tehokkaampaa ja silti chattihistoria voisi kasvaa miten pitkäksi tahansa.

Tuolle päivitysnopeuden hidastamiselle ei sinun tapauksessasi varmasti ole mitään tarvetta ja sehän myös lisäisi latenssia.

Tuolla perinteisellä WWW-chat systeemillähän käyttäjän koneelle ei myöskään tarvitse asentaa yhtään mitään, mutta se ei varmaankaan ole ihan standardinmukaista lähettää html-sivua, joka ei pääty koskaan, vaikka taitaakin toimia suunnilleen kaikilla selaimilla (tosin joillakin vaatii vähän kikkailua). Sinänsä PHP:llähän tässä lähetymistavassa on ongelmana, että jokaiselle käyttäjälle jää PHP-prosessi auki. Pienessä mittakaavassa se ei luultavasti olisi ongelma. Isommassa mittakaavassa ongelmaksi tullee, että palvelimella täytyy varata portti jokaiselle käyttäjälle, eli ne loppuvat kesken jos on yli 65000 käyttäjää.

E.K.Virtanen [13.07.2008 15:12:14]

#

Terve grez.

Tulipa opittua taas hieman :) Kiitoksia.
Aion asettaa maksimiksi 20 henkilöä jonka jälkeen ei päästetä ketään sisään joten siinä mielessä ei pitäisi kait porttien loppua kesken.

Olenko ymmärtänyt nyt sitten tämän

echo "<meta http-equiv=\"refresh\" content=\"2\">";

idean väärin kun olen käsittänyt että se vain "ohjeistaa" käyttäjän selainta päivittämään iframessa olevan sivun tietyin väliajoin, eli php prosessi suoritetaan loppuun?

Grez [13.07.2008 15:15:53]

#

Olet ymmärtänyt oikein. Puhuin tuossa PHP prosessin auki jäämisessä siitä kokonaan toisesta tavasta ("perinteisestä WWW-chatista"), jossa HTML-sivu jätetään auki, eli sitä ei uudelleenlatailla ollenkaan.

E.K.Virtanen [13.07.2008 15:18:27]

#

Ok, minulla on luetun ymmärtämisessä ongelmia ;)

E.K.Virtanen [13.07.2008 18:35:44]

#

Sellaisen kysymyksen vielä heittäisin tähän että on pientä ongelmaa tuon kanssa että ketä on vielä paikalla.

Nyt ajattelin tehdä niin että aina kun chattailija heittää juttua kanavalle, hänen ns. time keksinsä päivitetään kyseiseen aikaan +30min.
Pikaisesti ajateltuna tämä on helppo keino seurata kauanko viimeisestä viestistä on kulunut? Vaan miten softa tätä sitten seuraa onkin eri juttu.

Mietein tuossa että jos softa vaikka aina 10min välein kävisi tiedoston läpi jonne on tallennettu kävijöiden viimeiset viestit, ja jos aikaa olisi kulunut >30min niin nimi poistetaan listalta joka näyttää paikalla olijat.

Tietysti pitää tehdä mahdollisuus poistua "oikein" myös, eli painamalla "Poistu" joka hoitaa ruljanssin samantien ja poistaa myös keksit kävijältä.

Mennäänkö takapuoli edellä puuhun?

Grez [13.07.2008 18:57:34]

#

Toisaalta jos kerran 2 s välein ladataan tuo lukuikkuna, niin eikö se paikallaolo voisi päättyä huomattavasti nopeamminkin kuin 30 minuutissa. Tyyliin jos ei lukuikkunaa ladata 30 sekuntiin, niin ei varmaankaan ole enää paikalla.

E.K.Virtanen [13.07.2008 19:00:58]

#

Aivan totta. On jo sen verran pää sekaisin että järki ei juokse pätkääkään :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta