Thomas Weber schrieb: > 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.
Hey cool, That's working. The only problem I have now is that I want the most recent text at the top. But that script adds it on the bottom. Any way to change that? At least a way to always scroll automatically to the bottom? Cya, Olli -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php