Zum Inhalt springen

[PHP] Wie kann man einen wirkungsvollen Timeout bei Socket-Verbindungen setzen?


Empfohlene Beiträge

Hallo,

ich möchte über ein PHP-Skript Betriebsdaten von Temperatur-Sensoren auslesen, wobei ein proprieprietärer TCP-Dienst verwendet wird, bei dem bestimmte Bytes in der Antwort ausgewertet werden müssen.

Das funktioniert soweit alles, jedoch gibt es einen Haken: Die Geräte reagieren manchmal/sporadisch auf eine TCP-Anfrage nicht.

Damit mein PHP-Skript an dieser Stelle nicht für Ewigkeiten wartet, habe ich zunächst in der php.ini den Timeout auf eine Sekunde gesetzt.

Das hat nichts gebracht, darum habe ich nach dem Aufruf von fsockopen die Funktion stream_set_timeout mit ebenfalls einer Sekunde eingebaut. Hat ebenfalls nichts gebracht.

In einem weiteren Funktion habe ich die ganze Funktion so umgestellt, dass nicht mehr fsockopen zum Einsatz kommt, sondern socket_connect und der timeout über socket_set_option($fp, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>1,'usec'=>1)) gesetzt wird.

Das Problem bleibt aber dasselbe: Das PHP-Skript versucht mit dem Ziel zu verbinden und sofern dieses auf die TCP-Anfrage nicht antwortet, steht das ganze Skript etwas über eine Minute still.

Wie kann ich über ein PHP-Skript eine Socket-Verbindung aufbauen und dafür sorgen, dass diese nach einer Sekunde definitiv gekillt ist, egal ob sie erfolgreich aufgebaut wurde und Daten geliefert werden oder nicht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ohne jetzt die Details zu kennen, ich würde mal vermuten dass gar kein Timeout auftritt. Also das PHP Script baut die Verbindung auf, der Socket wird erzeugt, aber es kommen einfach keine Daten, d.h. technisch es existiert schon ein Socket und damit entsteht auch kein Timeout

Das Problem wirst Du letztendlich nur mit einer Art Threadding in den Griff bekommen, d.h. in einem Thread baust du die Verbindung auf und der andere Prüft wie lange die Verbindung schon läuft (aber Multithreadding unter PHP geht so direkt nicht). Ich würde ggf die Sensoren anpassen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...