PHP/Java chatScript

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP/Java chatScript

    Hallöchen...

    und zwar das Script:

    PHP-Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <title>Comet example 1</title>
    5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    6. <script type="text/javascript">
    7. function chat(txt) {
    8. document.getElementById("chat").innerHTML += txt;
    9. }
    10. </script>
    11. </head>
    12. <body>
    13. <div id="chat"></div>
    14. <?php
    15. for($i=0; $i<10; $i++) {
    16. echo '<script type="text/javascript">';
    17. echo 'chat("<p>server is still alive at '.date('Y-m-d H:i:s').'</p>");';
    18. echo '</script>';
    19. // sende die Ausgabe zum Browser
    20. flush();
    21. // warte 0.2 Sekunden um den Server zu entlasten
    22. usleep(1000000);
    23. }
    24. ?>
    25. <script type="text/javascript">
    26. chat("<p>server is done</p>");
    27. </script>
    28. </body>
    29. </html>
    Alles anzeigen


    liefert auf dem Webserver irgendwie nicht so das ergebniss wie auf dem Server beschrieben... Und zwar:

    Wenn ich das

    "usleep(1000000);" rausnehme zeigt er alles auf einmal an, lass ich es drin wartet er so lange mit der ausgabe bis er die 10 stellen fertig erzeugt hat...

    Demo Easy-coding: demo.easy-coding.de/ajax/comet-chat-tutorial/example1.php
    Wiki Artikel: [wiki]AJAX / Comet Chat Tutorial[/wiki]
    Auf dem Webserver: test.the-icc-group.de/test.php

    PHP info: test.the-icc-group.de/phpinfo.php

    vieleicht weiß einer ein rat, was es sein könnte (das Gleiche Problem tritt auch beim Xampp V1.7.7 auf)...

    greets

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von toxic ()

  • Hallöchen...

    THX, jetzt klappt es...

    Eigendlich eine recht simple sache wenn man es weiß.

    hab am ende dann noch "ob_end_flush()" gesetzt.

    das einzigste was bleibt ist, das er nach eine gewissen zeit die Verbindung verliert und meint das Fenster zu refreshen.

    Darüber ist mir gerade was eingefallen... warum nicht die ausleseroutine extra setzen (oder includen) und den rest dann einfach ausgeben lassen... (mal sehen ob es klappt).

    Leider kein erfolg, da er, wenn er die verbindung verliert oder im Timeout geht nach der headeradresse springt und so das fenster refresht und komplett zurücksetzt...

    greets

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von toxic ()

  • Hallöchen,

    weiß schon nicht mehr was ich alles machen soll.

    hier nochmal das script:

    vorweg, es geht alles von der "chatty.php" aus.

    PHP-Quellcode

    1. <FRAME SRC="oframe.php?id=<?php print $id?>" marginwidth="0" marginheight="0" name="Output">


    aus...

    -------------'oframe.php'---------

    PHP-Quellcode

    1. <?php
    2. for($i=0; $i<999999999999999999999999999999999999999999999; $i++) {
    3. ob_flush();
    4. print date("H:i");
    5. print "<br><script>scrollWindow()</script>";
    6. // sende die Ausgabe zum Browser
    7. ob_flush();
    8. flush();
    9. // warte x Sekunden um den Server zu entlasten
    10. usleep(500000);
    11. }
    12. ?>
    Alles anzeigen


    wenn das 'Oframe.php' nun abricht, dies passiert in ca4-8min geht er automatisch auf die Catty.php und da frag ich mich, weshalb er überhaupt abricht und auf die Chatty.php zurückgreift???? Wenn das Script ohne das Frame ausgeführt wird bricht er nicht ab (sprich es läuft ohne probleme durch).

    weiß einer ein rat/tip???

    greets

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von toxic ()

  • Also php scripte im Apache brechen irgendwann ab, das kann am Server liegen oder am Client. HTTP ist nicht dafür ausgelegt so lange Verbindungen zu handeln.

    Ansonsten nochmal der Aufbau..
    * chatty.php bindet einen iframe mit der oframe.php ein.
    * oframe.php ist das script, das lange laufen soll.

    Irgendwann hat oframe einen Timeout und bricht ab.
    jetzt müsste sich irgendjemand darum kümmern, den iframe wieder zu starten.

    Das ginge vermutlich mit JavaScript. Du kannst im ersten Flush der oframe.php einen Timer starten, der eine globale Variable prüft und die Seite bei Bedarf neu lädt.
    Mit jedem Flush in der iframe solltest du diese globale Variable zurücksetzen.

    Mal runtergetippt mit Pseudo JavaScript:

    Quellcode

    1. <script type="text/javascript">
    2. function Chat() {
    3. this.timer = aktuelle uhrzeit;
    4. window.setInterval(this.checkInterval, 500);
    5. this.write = function(msg) {
    6. this.timer = aktuelle uhrzeit;
    7. document.getElementById('msg').innerHTML += '<p>' + msg + '</p>';
    8. scrollWindow();
    9. };
    10. this.checkInterval = function() {
    11. if(this.timer älter als 30 sekunden) {
    12. window.location.refresh();
    13. }
    14. };
    15. }
    16. var chat = new Chat();
    17. </script>
    18. <div id="msg"></div>
    19. <?php
    20. while(1) {
    21. print "<script>chat.write('hello world')</script>";
    22. // sende die Ausgabe zum Browser
    23. ob_flush();
    24. flush();
    25. // warte x Sekunden um den Server zu entlasten
    26. usleep(500000);
    27. }
    Alles anzeigen
  • Hallöchen...

    mal ganz ehrlich, ich bin noch immer so schlau wie vorher...

    hier mal das komplette script...

    Quellcode

    1. for($i=0; $i<999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; $i++) {
    2. ob_flush();
    3. if ($s == 1){
    4. $s=0;
    5. }else{
    6. //setze den eintrag im chat
    7. if($result = $db->query("SELECT * FROM $roomy ORDER by id DESC LIMIT 1")){
    8. while ($data = $result->fetch_object() ){
    9. $eintragung = $data->id;
    10. if ($line_id < $eintragung){
    11. if ($data->message != "")print $data->message."<br>";
    12. //ob_flush();
    13. flush();
    14. //ob_end_flush()
    15. print "<script type=\"text/javascript\">
    16. scrollWindow()
    17. </script>";
    18. $line_id = $data->id;
    19. }}
    20. //setze private nachrichten im chat
    21. if($result = $db->query("SELECT * FROM privat WHERE nick = '$nickname' ORDER by id DESC LIMIT 1")){
    22. while ($data = $result->fetch_object() ){
    23. $eintragung = $data->id;
    24. if ($line_id < $eintragung){
    25. if ($data->message != "")print $data->message."<br>";
    26. //ob_flush();
    27. flush();
    28. //ob_end_flush()
    29. print "<script type=\"text/javascript\">
    30. scrollWindow()
    31. </script>";
    32. $line_id = $data->id;
    33. }}
    34. // sende die Ausgabe zum Browser
    35. ob_flush();
    36. flush();
    37. // warte x Sekunden um den Server zu entlasten
    38. usleep(500000);
    39. }
    40. }}
    Alles anzeigen


    Ich hatte auch mal dein Example3 probiert, nur bekomm ich da nicht weitere Aufrufe mit hin (sprich, den Eintrag im Chat setzen geht nur nicht die Privaten eintragungen mit Abfrage)...

    easy-coding.de/wiki/html-ajax-…ispiel-mit-php-mysql.html

    In Grundegenommen könnt ich auch alles über eine Tabelle laufen lassen.

    Was wohl auch die beste alternative ist, so mit dem Script.

    greets

    Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von toxic ()

  • Hallöchen...

    Jetzt kommt ein neues Problem, da das script nicht 100% funktioniert...

    sprich, aufem IE/avant bricht der stream ab ca beim 17malige anzeige (wird nix neues mehr angezeigt), was wiederum beim Firefox und Opera nicht ist...

    Also so komm ich nicht wirklich weiter...

    genutzt wird dieses script:

    easy-coding.de/wiki/html-ajax-…ispiel-mit-php-mysql.html

    hat eine eine brauchbare Idee???

    Hab jetzt ein anderes Script gefunden, mal sehen wie das ist... thx für die Hilfe...

    Greets

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von toxic ()