socket Verbindung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • socket Verbindung

    Wie mache ich mit PHP eine socket-Verbindung auf und halte darüber die Verbindung?
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

  • #2
    Mahlzeit,
    meiner Meinung nach ist das noch in der Experimentier-Phase, also noch nicht endgültig fertig. Da musst Du mal im PHP-Handbuch unter Socket-Funktionen nachschauen.
    Kann Dir hier aber mal ein kleines Beispiel geben:

    test_socket=socket(AF_INET,SOCK_RAW,***);
    test_connect=connect($test_socket,192.168.1.1);

    Da, wo die *** sind, muss noch der Descriptor für das Protokoll hin, hab ich nur nix gefunden :-(

    Ansonsten müsste der eine Internet-Socket-Verbindung im Rohdaten-Modus mit der IP: 192.168.1.1 ertsellen.
    Danach kannste mit read und write lesen oder schreiben.

    adios
    bohni

    Kommentar


    • #3
      @bohni

      Ich habe überhaupt keinen Schimmer von socket-Verbindungen.
      Ich möchte einen PHP-Chat damit proggen und weiß nur nicht wie ich die Verbindung darüber aufbaue und halte.
      *winks*
      Gilbert
      ------------------------------------------------
      Hilfe für eine Vielzahl von Problemen!!!
      http://www.1st-rootserver.de/

      Kommentar


      • #4
        also ich würde einen chat nich mit php sondern mit java machen, da du da die aufgaben besser verteilen kannst. da mchste ein applet und ein servlet und die kommunizieren über ne socket-verbindung.
        ob das aber mit php so gut geht, weiss ich auch nich. hab nur mal so im php-handbuch nachgeschaut.
        ich probier hier mal local was aus und melde mich dann nochmal.

        adios
        bohni

        Kommentar


        • #5
          Vergiss das mit socket() und connect(), das geht auch einfacher mit fopen().
          Ich habe das hier mal ein bisschen probiert und würde Dir davon abraten:
          Erstens durch die Socket-Verbindung hält der Browser immer die Verbindung aufrecht, lädt die Seite somit immer wieder, da ja das PHP-Zeug nur aufm Server läuft und der Browser ja alles mitbekommen soll, was aufm Server los ist.
          Zweitens ist der Server damit sehr stark belastet und hat unter Umständen keine Zeit mehr für andere Reguests.

          Ansonsten kannste das ja mal selber probieren, ich habe es mit Hilfe einer Text-Datei gemacht, in der ich immer den Chat-Text reingeschrieben habe. Zur Anzeige habe ich immer die Seite aller 3 Sekunden neu geladen, und da erschien halt dann immer der neue Text mit. Die Datei wird natürlich immer größer und somit das Auslesen immer langsamer. Wenn jemand eine andere Idee hat, bitte posten, mir fällt dazu nix anderes ein, außer vielleicht mit ner Datenbank. Das ist dann aber noch langsamer.

          Wie gesagt, ich würde einen Chat nur mit Java machen, da Du dort eine korrekte Socketverbindung herstellen kannst, in dem das Servlet (aufm Server) und das Applet (aufm Client) nur dann kommunizieren, wenn auch wirklich was passiert. Ist ausserdem resourcenschonender.

          Hoffe, Dir erstmal bisschen weitergeholfen zu haben
          ciao
          bohni

          Kommentar


          • #6
            Ne nicht so richtig!!!???!!!

            Mit Java wollte ich das eigentlich nicht machen.
            Mit einer MySQL-Datenbank schon eher.
            *winks*
            Gilbert
            ------------------------------------------------
            Hilfe für eine Vielzahl von Problemen!!!
            http://www.1st-rootserver.de/

            Kommentar


            • #7
              Also,
              du brauchst eigentlich nur eine Datenbanktabelle mit den Feldern ID, Name, Nickname, etc. und Nachricht.
              Dann machst du ein Framset mit 2 Frames, eines oben und eines unten. Das obere lädtst du aller 3 Sekunden neu, und dort wird immer die Datenbank ausgelesen, nämlich die Felder Nickname und Nachricht.
              Im unteren Frame machste ein Texteingabefeld, dort gibst Du die Nachricht ein und beim Absenden wird der Text in die Datenbank geschrieben.
              Du musst nur am Anfang bei der Nutzeranmeldung eine Session starten, damit Du weisst, welcher Benutzer gerade etwas in die Datenbank einträgt. Registrierste eine Variable, in der die Nutzer-ID drin steht.
              Den Code muss ich auch erstmal ausprobieren, hab das hier nur mal so überdacht :-)

              adios
              bohni

              Kommentar


              • #8
                Das ist mir klar, nur möchte ich noch weitere Sachen als 2 Frame machen. Das ist aber eine andere Geschichte. Wie kann ich mich mit sockets Verbinden und halten, das ist meine Frage? Das Grundgerüst des Chats ist ja fast fertig.
                *winks*
                Gilbert
                ------------------------------------------------
                Hilfe für eine Vielzahl von Problemen!!!
                http://www.1st-rootserver.de/

                Kommentar


                • #9
                  wozu willst du die Verbindung halten? Für einen Stream machst du deinen Server platt. Sowas funktioniert nur bis 5-10 Chat-User gleichzeitig und da macht dein Server schon nix anderes mehr. Für dauerhafte Verbindungen gibt es spezielle Applications und Umgebungen, also sowas wie Apache-Ersatz. Auf der PHP-Konferenz (http://www.php-conference.de) gabs dazu einen Vortrag.

                  Mach es wenn dann lieber mit der Reload-Geschichte wie bohni das schreibt.

                  Kommentar


                  • #10
                    Ich müß Trafik zahlen und wollte es deswegen anders machen als mit reload.
                    *winks*
                    Gilbert
                    ------------------------------------------------
                    Hilfe für eine Vielzahl von Problemen!!!
                    http://www.1st-rootserver.de/

                    Kommentar


                    • #11
                      so, im php-manual is ein ganz gutes beispiel über eine socket-verbindung:

                      fp = fsockopen ("www.php.net", 80, &$errno, &$errstr, 30);
                      fputs ($fp, "GET / HTTP/1.0\r\n\r\n");
                      while (!feof($fp)) {
                      echo fgets($fp,128);
                      }
                      fclose($fp);

                      das is eine korrekte socket-verbindung, nur musst du dir dazu noch die richtigen anweisungen des http-protokolls mal angucken, musst du mal unter RFC+Internet (bei w3c.org) suchen. nochmal was zum traffic, bei einer socket-verbinfung zahlste aber auch den traffic, denn der server hält ja immer die verbindung und testet in bestimmten abständen, ob der client noch da ist. wenn du mal das obige beispiel ausprobierst, wirst du sehen, das der browaser ständig am laden ist.

                      ich hab das hier mal mit einer datenbank probiert, hier ist mal das beispiel:

                      ...
                      <?php
                      $conn=mysql_connect($host,$user,$pass);
                      $select=mysql_select_db("tabelle",$conn);
                      $query_chat1=mysql_query("select * from tb_chat");
                      while($arr_chat1=mysql_fetch_array($query_chat1)){
                      echo $arr_chat1["Nickname"].": ".$arr_chat1["Nachricht"]."<br>";
                      }
                      ?>
                      ...

                      das ist das obere frame, welches immer aller 3 sekunden neu geladen wird (<meta http-equiv="Refresh" content="4; URL=chat_oben.php">)

                      ...
                      <?php
                      if($action=="senden"){
                      $conn=mysql_connect($host,$user,$pass);
                      $select=mysql_select_db("tabelle",$conn);
                      mysql_query("insert into tb_chat(Nickname,Nachricht) values ('$nickname','$nachricht')");
                      mysql_close($conn);
                      echo "<script language=javascript>window.location.href=\"chat_unten.php\"</script>";
                      }
                      ?>
                      <form action=chat_unten.php method=post>
                      <input type=hidden name=action value=senden>
                      <input type=hidden name=nickname value=nick1>
                      <input type=text name=nachricht>
                      <input type=submit value=senden>
                      </form>
                      ...

                      das ist das untere frame, in dem du die nachricht reinschreibst, diese wird dann in die datenbank reingeschrieben.
                      is jetzt nur ein einfaches beispiel, funktioniert aber.

                      es gibt nur ein problem, was brainbug schon angedeutet hat: ich hab das hier mal mit 3 fenstern ausprobiert, also 3 nutzer die gemeinsam chatten. da hatte ich manchmal eine prozessorauslastung von knapp 20% im peak (pII-233MHz). wenn aber so ca 20-30 leute rumchatten, dann glaub ich, dass der server beim provider so gut wie zu ist.
                      es gibt da auch bestimmte anbieter, die chatsysteme anbieten bzw. auf denen man einen chat stellen kann, die kosten dann allerdings bestimmt auhc noch was.

                      adios
                      bohni

                      Kommentar


                      • #12
                        Also das was ich da lese hört sich garnicht gut an!!!!!!!

                        Werde woll doch mit refresh arbeiten müssen.

                        Gut dann bin ich auch fast fertig mit meinen Chat.

                        @all
                        Danke noch mal.
                        *winks*
                        Gilbert
                        ------------------------------------------------
                        Hilfe für eine Vielzahl von Problemen!!!
                        http://www.1st-rootserver.de/

                        Kommentar


                        • #13
                          is halt das problem, wenn du mit sockets arbeiten möchtest, da musst du halt runter auf die protokoll-ebene, hier also das http-protokoll.
                          hab das auch noch nie gesehen, dass ein chat in php mit ner socket-verbindung arbeitet, die machen das alle über refresh.

                          also, viel spass noch :-)
                          bohni

                          Kommentar

                          Lädt...
                          X