Re: Chat with php
| From: | Robert Cummings | Date: | Mon, 07 Oct 2002 22:11:18 +0000 |
| Subject: | Re: Chat with php | ||
| References: | 1 2 3 4 5 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-119149@lists.php.net to get a copy of this message | ||
I wrote a browser based mud client prototype with this system to connect to
a mud I run. however I had no trouble using the database fr my input. WHat
I DID have trouble with though was how the browser began to slur and lag
and go nuts after a few thousand lines. I'm guessing it was creating a huge
dom tree, which would be especially frustrating for it since I sent out font
tags I never closed to emulate ansi colours. Prolly not a very usable idea,
but was damn fun to explore :)
Cheers,
Rob.
Thomas Weber wrote:
>
> Hi,
>
> i'm running a selfmade PHP-chat since one and a half year, currently version
> 3. Maybe we can share some ideas....
> The image-idea is interesting, but would take heavy bandwith i think.
> My chat runs over a simple dsl-line with 256kbit upstream, there are up to
> 50 users at the same time (slow but okay). It's very good at 30 users, but
> there is a whole community with galleries etc. on the same server.
>
> What i know:
>
> To avoid reloads, you must use a "stream". That's the
> flush()'n'sleep()-thing. This is my main-loop:
>
> 01 ini_set("max_execution_time", "0");
> 02 for(;;)
> 03 {
> 04 $newline = get_newline($last_row); // fetch a new line (out of an
> database for example, returns time, alias, text as array, or false if no new
> line is found)
> 05 if(is_array($newline))
> 06 {
> 07 $newtext = format($newline); // format line for output (text
> "bla" could be "(01:01) Alias: bla" and "/me bla" could be
> "Alias bla",
> returns the string to be outputtet to the browser)
> 08 if($newtext AND $newtext != $oldtext) echo $newtext; // if it's
> new text (avoids flooding), output the line!
> 09 $last_row = $newline["id"]; // next time fetch another id
> 10 flush(); // sends buffer to browser
> 11 echo "\n<!-- for Opera -->\n"; // Opera seems to use a strange
> buffer and does not display the last line, so send another one, invincible
> 12 flush(); // flush again, opera should now display the line
> 13 }
> 14 unset($newline);
> 15
> 16 usleep(200000); // sleep some time, otherwise the script would
> eat 100% CPU. Usuable on my server (p3-550) are 100000 to 500000 msec
> 17
> 18 $loop++;
> 19 if($loop > 600)
> 20 {
> 21 echo "<!-- TOK -->\n"; // some browsers kill the connection if
> it is dead for some time, so send a "time out kill", some minutes are enaugh
> 22 $loop = 0; // reset
> 23 }
> 24 }
>
> Okay, tha's the deal......
>
> max_execution_time is set to unlimited, I had streams running several
> days..... Fortunately PHP kills the scripts automatically if no brower is
> listening.
>
> To fetch a line there are some ways.... the most simple is to query a
> database for a line with an higher id, but this eats up loads of cpu-usage
> in bigger chats. Currently i use shared memory. I've an php-console-script
> running wich fetches newline out of the database and writes 'em into shared
> memory. This is MUCH faster than have every stream-script connecting to the
> db.
>
> What i don't know:
>
> I'm searching for an better idea to interchange data between the scripts
> wich enter data, the server and the stream-scripts. Shared memory is good
> enaugh for the last two one, but it ever takes min. the 200000 ms sleep-time
> for a new line. I need something to awaik the script exactly when a new line
> is in memory.
> Synchronisation between enter and server is more difficult, because there is
> the posibillity for two scripts entering a new line at the same time....
> don't know how to avoid this.
>
> I hope this helps.
>
> Cya,
> Thomas 'Neo' Weber
> ---
> thomas@youngarts.org
> neo@gothic-chat.de
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
--
.-----------------.
| Robert Cummings |
:-----------------`----------------------------.
| Webdeployer - Chief PHP and Java Programmer |
:----------------------------------------------:
| Mail : mailto:robert.cummings@webmotion.com |
| Phone : (613) 731-4046 x.109 |
:----------------------------------------------:
| Website : http://www.webmotion.com |
| Fax : (613) 260-9545 |
`----------------------------------------------'