pthreads auf dem Raspberry

  • Hallo,
    für mein aktuelles PHP Projekt wären Threads nicht schlecht. Da php5 ja von Haus aus kein Multithreading unterstützt, bin ich auf der Suche nach einer Möglichkeit Threads doch gangbar zu machen. Dabei bin ich auf pthreads gestoßen. Hat schon jemand Erfahrungen gemacht geschweige denn es auf seinem Raspberry zum Laufen gekriegt? Da ich nicht gerade ein Crack in Sachen Linux bin, wären ein paar Tipps ganz hilfreich. Sofern ich das richtig gelesen habe, müsste ich eine PHP-Version mit dem Packet von pthreads neu compilieren, jedoch habe ich so etwas noch nie gemacht. Hat jemand eine Idee, wie so etwas funktioniert?

    Gruß
    Keano

  • welches Problem willst du durch die Threads gelöst bekommen? Es gibt gute Gründe warum PHP so etwas nicht von sich aus unterstützt, und es wäre gegebenenfalls besser, PHP zu ersetzen statt es zu etwas zu prügeln das es nicht sein will.

  • Mit PHP habe ich eine Websocket-Server mit Ratchet umgesetzt. Dieser Server soll nun in regelmäßigen Zeitabständen eine mysql Datenbank auf Änderungen überprüfen und gegebenenfalls an alle offenen Sockets eine Benachrichtigung senden. Aktuell suche ich eine bessere Lösung für das Prüfen, da ich im Moment eine Endlosschleife laufen lasse. Problem hierbei ist, dass sich keine neuen Sockets mehr öffnen lassen, sobald die Schleife läuft. Eine funktionierende Methode wäre, dass die Website nach erfolgreichem Verbindungsaufbau einfach selbst in regelmäßigen Zeitabständen die Änderungen von Server abfragt, aber das kann man sicherlich viel schöner lösen, als ich das versuche.

    Einmal editiert, zuletzt von Keano (22. Januar 2017 um 02:38)

  • Ach du meine Güte, die Menge an kräftigen, schmerzvollen Hammerschlägen die PHP hinnehmen muss, um so etwas wie Ratchte möglich zu machen ist ja erschreckend. Aber gut, ich muss das ja nicht schreiben.

    Vergiss Threads. Du handelst dir massiv Probleme dammit ein, weil PHP überhaupt nicht darauf ausgelegt ist. Thread-sichere Datenstrukturen und Inter-Thread Kommunikation ist schwer, und wenn es nicht in der Sprache konzeptionell drin ist, wird es explodieren. Die Existenz dieses Paketes ist da kein Gegenbeweis. Eher der Beleg. Sonst wäre das im Sprachstandard.

    Was man eh tun sollte - auch zB in Python oder C++ - ist ereignisbasiert zu arbeiten. Und da gibt esmfür periodischen Aufgaben Timer: http://socketo.me/api/class-React.EventLoop.Timer.Timer.html

    Die solltets du benutzen.

  • Blöde Frage: Wieso erstellst du den Thread im " Web-Programmierung" Bereich wenn denn dein Anliegen aber eigentlich nichts damit zu tun haben scheint?
    Wortwörtlich WEB ist in 2 Lager aufgeteilt:
    - Server
    - Client
    WEB funktioniert nur wenn beides aktiv ist. Ohne Client kann der Server nichts darstellen und wenn es keinen Client im Sinne eines Browser gibt dann handelt es sich nicht um WEB.

    PHP wird zudem nur Server Seitig ausgeführt, der Client löst höchstens die Ausführung auf dem Server aus aber bei ihm selbst wird kein PHP ausgeführt.
    Surft ein Client auf eine Webseite, die mithilfe eines PHP-Scripts generiert wird oder generell eine php Datei anspricht, kann diese Datei sowieso nur für eine begrenzte Dauer ausgeführt werden und blockiert dabei die ganze Zeit den Client bzw Browser.

    Was das ganze wiederum mit Linux zu tun hat bzw wieso man für PHP oder WebSocket Erfahrungen mit Linux benötigt, erschließt sich mir eben so wenig.

    Dein gesamtes Vorhaben klingt nach: von hinten durch die Brust ins Auge!

  • meigrafd das ist hier schon richtig. Ratchet kannte ich bis dato auch noch nicht - das ist im Grunde Tornado für PHP. Insofern schon passend. Nur gilt dafür natürlich auch dasselbe wie für die asynchrone Programmierung überall anders auch - blockieren gilt nicht. Stattdessen müssen Timer verwandt werden.

  • Naja, es handelt sich ja schon um Webprogrammierung. Der clientseitige Teil ist ja bereits fertig. Mir fehlt jetzt halt nur die Schnittstelle zur Datenbank. Das möchte ich gern mit PHP und Sockets umsetzten. Und was das ganze mit Linux zu tun hat steht ja oben im Post: Um die pthreads Erweiterung zu nutzen muss ein neuer Build von PHP mit dem besagten Packet erzeugt werden. Nur habe ich soetwas auf Linux (geschweige denn auf einem Raspberry) noch nicht machen müssen und daher fehlt es mir da an Erfahrungen.

    @__deets__: Danke für deinen Tipp. Werde es mal mit dem Timer probieren.

    Gruß Keano

    Einmal editiert, zuletzt von Keano (22. Januar 2017 um 18:17)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!