Daemon mit PHP

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

  • Daemon mit PHP

    Hi,

    ich plane einen Daemon in PHP zu schreiben. mit pcntl und pntl_fork kein Problem. Hab mtwl auch schon tesweise ein Script im Hintergrund laufen.

    Es geht mir darum, Datenmengen einmal zu organisieren (zur Laufzeit) und diese mit dem Daemon vorzuhalten.

    Wenn jemand Tipps hat worauf ich beim Prozesshandling achten muss, wäre ich euch dankbar.

    Nun aber zu meinen Problem:
    Ich frage mich gerade wie ich es realisieren kann, das mein "Daemon" angesprochen werden kann. Ich kann ihn ja schlecht per http aufrufen, das würde ziemlich wenig Sinn machen.
    Wie kann ich also am besten meinen Daemon was fragen, wie ralisiere ich am Geschicktesten die Schnittstelle?

    Ich muss den Daemon ein paar Variablen übergeben und dafpr eine Antwort bekommen.

  • #2
    Hi,

    ipc to the rescue. Ich würde mich auf nem unixoiden system für ne
    fifo entscheiden.

    http://de.php.net/manual/de/function.posix-mkfifo.php

    Einmal erzeugt kannst du wie mit dateien damit arbeiten, mit
    den file-io-funktionen von php.

    Auf anderen systemen kann man natürlich eine kontrollverbindung
    über tcp/udp-sockets aufbauen. Auf windows vll sone art DDE-wrapper.

    greets

    EDIT:
    Nachtrag: das hier sieht doch auch gut aus http://de3.php.net/manual/de/function.msg-get-queue.php
    Zuletzt geändert von closure; 19.04.2006, 08:41.
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

    Kommentar


    • #3
      Hmm, danke.

      Das hört sich schonmal gut an. Grundliegend sollte es aber so sein, das mein Daemon auf einer anderen Kiste laufen können soll als der Webserver(Script) der ihn fragt.

      Hab hier ein HowTo gefunden um SocketReads und Writes zu machen. http://www.php-mag.net/itr/online_ar...odeid,114.html

      Die Frage ist nur, wie definiere ich die Schnittstelle? Sprich, was könnte ich per fsockopen mit dem Daemon reden?

      Kommentar


      • #4
        So,

        ich schreibe nun einfach auf den Socket und werte das ganze im Server aus, Zeielnweise.

        Das funktioniert gut.

        Nun habe ich noch ein Problem. Ich forke Childs. Das ganze mach ich sowieso nur, weil ich eine adjazenzmatrix einmale generieren möchte und pro connect, pro child nur ausfragen will.
        Sprich ich muss meinen Array Speichermäßig den Childs zugänglich machen. Hat da jemand Tips für mich?

        Kommentar


        • #5
          Hi,

          da könnte eine andere form der ipc hilfreich sein, die da heisst
          shared memory.
          Etwas lektüre: http://de3.php.net/manual/de/function.shm-attach.php

          Du kannst natürlich auch einfach dein array serialisieren und
          es via pipe zu den kindern schicken.


          greets
          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #6
            Irgendwas versteh ich grad nicht ganz. Die Kinder sind doch immer Kopien des Parents, oder nicht?

            Wenn ich ein neues Child forke hat es doch alle eigenschaften und variablen des Parents - somit also auch meine Array (der meine Matrix enthält). Habe ich jetzt tausend requests, dann hab ich doch auch tausend kopien meines Arrays?

            Kommentar


            • #7
              Hi,

              dein kindprozess ist eine kopie des eltern prozesses. Es hat
              allerdings einen eigenen addressraum, erbt dateidescriptoren
              vom parent, zeitstrukturen werden zurück gesetzt usw.

              Das ich das richtig verstehe.
              Du willst einmalig deine adjazensmatrix anlegen.
              Diese matrix soll vom demon erzeugt und gehalten werden.
              Der demon ist via sockets erreichbar.
              Bei jedem request soll ein kindprozess aufgeforked werden
              der dann die bearbeitung des requests übernimmt, während
              der demon weiter am socket lauschen kann.
              Die aufgabe der kindprozesse ist im wesentlichen daten
              aus der matrix zu lesen bzw. operation darauf auszuführen.

              Genau für solche fälle gibt es shared-memory.
              Und wieder etwas lektüre die dich weiter bringen sollte.
              http://www.php-mag.net/itr/online_ar...odeid,114.html
              Der für dich wichtige teil steht im unteren drittel

              greets
              (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

              Kommentar

              Lädt...
              X