Re: Chat with php

From: 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 | `----------------------------------------------'

« previous php.general (#119149) next »