"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

chat in php

irreversible 01.10.2002 - 20:24 1088 17
Posts

irreversible

oberspammer
Avatar
Registered: Mar 2001
Location: 2524
Posts: 1058
muss für ein schulprojekt für ein anderes programm unter anderem ein chat modul in php schreiben. hab mich schon im inet umgschaut nach brauchbaren chattechnologien, aber im prinzip hab ich bis jetzt immer nur das gleiche gfunden ... eine seite, die sich halt alle paar sekunden aktualisiert. da der chat auch für 100+ user (natürlich auch in getrennten räumen, aber 20 pro channel könnens durchaus sein) brauchbar sein sollte, is die lösung einfach gschissen, weil ja dann auf einmal ein block mit 20 zeilen kommt oder so.

hat irgendwer an plan, wie ma das gscheit macht bzw einen link oder sowas?

mfg und thx

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
"gscheit" geht das AFAIK überhaupt nicht mit reinem HTTP. Entweder es ist nicht realtime genug (siehe oben), oder es braucht zu viele Ressourcen (die andere Alternative ist nämlich, die Connection zum Browser offen zu lassen und regelmäßig die neuen Daten zu schicken, oder irgendein Dummyzeug wenn nix kommt, um Timeouts zu vermeiden).

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
naja, wenn man's anders macht (nämlich dass die tcp connection einfach offenbleibt und die zeilen stückweise rauskommen), dann wird man wohl mim php timeout ins gehege kommen. ob man das umgehen kann, weiß ich nicht.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
rofl, php-timeout auf 24h stellen *gg*

imho die einzige möglichkeit es gscheit zu machen is ein eigenes modul zu schreiben, inwieweit dass dann mit der sprache php zu tun hat ist eine andere geschichte...

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
gescheit wäre, es überhaupt nicht über tcp (und damit http) zu machen, wie that schon gesagt hat.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
ja, am besten schreibst was ganz neues: ein chat programm, taufst es internet relay chat und..... halt da passt was net, welches jahr haben wir?

ähm, ich glaub net dasses möglich ist php vom tcp-protokoll wegzukriegen, und WENN du das schaffst, wie willst du das dann beim client anzeigen, mit mirc?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von irreversible
muss für ein schulprojekt für ein anderes programm unter anderem ein chat modul in php schreiben. hab mich schon im inet umgschaut nach brauchbaren chattechnologien, aber im prinzip hab ich bis jetzt immer nur das gleiche gfunden ... eine seite, die sich halt alle paar sekunden aktualisiert. da der chat auch für 100+ user (natürlich auch in getrennten räumen, aber 20 pro channel könnens durchaus sein) brauchbar sein sollte, is die lösung einfach gschissen, weil ja dann auf einmal ein block mit 20 zeilen kommt oder so.

hat irgendwer an plan, wie ma das gscheit macht bzw einen link oder sowas?

mfg und thx
rofl, mir is jetzt wirklich was eingfallen...
user-seite:
timeout (!) <1/10 s (!!)
eingabefiles (siehe unten) werden mit javascript gelesen und per document.write hingepinselt
beim SCHREIBEN wird dann das php-file aufgerufen

serverseite:
es wird nicht alles gespeichert, sondern nur die user-list und immer zb. 2sekunden oder 10 sekunden chat, aber nicht in einer seite, sondern pro eingabe ein file (wenn dir was besseres einfällt: bitte :) )
das php-script schreibt lediglich die usereingaben in die files, wodurch das script nur kurz laufen muss

problem: das clientseitige script hat die aufgabe zu überprüfen, ob es eine eingabe schon eingelesen hat, oder nicht

so - just a thought, is aber möglich


EDIT: bledsinn, net timeout, sondern klarerweise intervall....

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
...und jeder Client schickt 10 HTTP-Requests pro Sekunde an den Server?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
is, ja egal... was sind schon 10 http-requests? wenn ich die overclockers seite refreshe hab ich 150 requests, das sind ja keine datenmengen, die da rüberkommen, es geht ja u.u auch mit 1/3 bis 1/5 noch angenehm... is ne einstellgschicht....

edit: ausserdem ist es eine möglichkeit ohne limit-probleme auszukommen, ich hab nicht gesagt, dass sie überaus gut performt
Bearbeitet von watchout am 01.10.2002, 22:33

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
500 Bytes * 10 Requests * 100 User / 1 s = 500 kByte/s für die "paar" Requests... die "keine Datenmenge" frisst 5 MBit Bandbreite.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
ja, ok in dem punkt hab ich mich wohl "ein bisserl" :rolleyes: verschätzt - aber ich hab mir was überlegt, was gehen könnte und was auch funktioniert, auch wenn es net ideal is' - sag' wie man's besser macht, dann mecker'! und net kein tcp, weil soweit bin ich auch schon kommen....

mir fällt grad ein, dass es ein irc-modul für php gibt, rennt zwar nur unter linux afaik , aber das heisst ja dass es möglich is', net?

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
200 Connections gleichzeitig offenzuhaben soll ja nicht so ein Problem sein. Also für so einen kleinen internen Server ist es mit ständig offenen Connections noch am besten geeignet. Musst halt einen Weg finden, wie du im PHP auf ein Event warten kannst (Blocking Reads von einer Pipe oder sowas)

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Die Lösung, die ich mal gesehen habe, war in 2 Frames geteilt: im ersten war die Verbindung dauerhaft offen, und im zweiten hat man seine Eingaben gemacht und mittels normalem Form-Submit an den Server geschickt. Der hat das "irgendwie" an alle offenen Connections weitergeleitet.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von that
Die Lösung, die ich mal gesehen habe, war in 2 Frames geteilt: im ersten war die Verbindung dauerhaft offen, und im zweiten hat man seine Eingaben gemacht und mittels normalem Form-Submit an den Server geschickt. Der hat das "irgendwie" an alle offenen Connections weitergeleitet.
kann man sich zb am orf-chat anschaun, wenn man java deaktiviert

dass die conn immer offenbleibt, da könnt' ich nur spekulieren... des will ich jetzt net, also lass ichs...

und falls dir das was bringt: http://www.php.net/manual/de/ref.ircg.php
funkt übrigens nur mit dem thttpd-webserver!

Newcron

Bloody Newbie
Registered: Oct 2001
Location: Klosterneuburg
Posts: 22
hm... vielleicht bringens die neuen Socket funktionen in PHP ( http://www.php.net/manual/en/ref.sockets.php ) aber das mit der running time ist trotzdem ein problem, genauso wie das, dass für jeden benutzer das php script unabhängig ausgeführt wird, also was user 1 macht kann user 2 nicht sehen, man müsste die scripte irgendwie miteinander kommunizieren lassen - wäre ansich möglich - PHP hat das drauf, aber auch nur unter ^(UNI|LINU)X$
Für einen chat brauchst du einen server, der ständig läuft und alles verwaltet - das ist das allereinfachste. PHP ist dafür nicht allzu gut...
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz