mikrocontroller.net

Forum: PC-Programmierung Daemon starten unter Xampp


Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, wie richte ich unter Xampp einen Daemon ein? Er soll, wenn 
auf Port 10000 ne TCP Verbindung anfragt, ausgelöst werden und ein PHP 
Script ausführen.

Danke für alle Infos.

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe den Wiport jetzt schon am laufen. Leider wird die TCP Verbindung
dauerhaft ausgeführt. Aber warum?
Ich baue eine TCP Verbindung zum Server an PORT X auf. Nun stoße ich den
Daemon, welcher an der ein PHP Script ausführt.

Dadurch das die TCP Verbindung nicht geschlossen wird, wird aber das
Script immer wieder ausgeführt.

Wie kann ich den Socket schließen, nachdem der Daemon einmal ausgeführt
wurde?

Ich komme einfach nicht weiter...

Ich bin dankbar für jeden Tipp.

Bye Patti

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suchst du eventuell http://de3.php.net/socket_close

Was ist wiport?

Ich weiß nicht was du da genau machst, aber man kann problemlos nur mit 
php Sockets (sowohl als Server, als auch Client) öffnen.

Hier findet man einige beispiele, es gibt aber auch noch diverse Klassen 
dafür. http://de3.php.net/manual/de/ref.sockets.php

Socket Server lässt man in PHP am besser mit der CLI (Command Line 
Inferface) Version laufen. Einfach die Binary Datei php(.exe) mit dem 
Pfad zum Script als Parameter ausführen.

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Wiport ist ein WLAN Modul, welches serielle Daten über Wlan als HTML 
Seite darstellt.
Die Fsockopen nutze ich schon für die Spätere Parsen Funktion.
Danke

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fsockopen != sockets Funktionen

So wirklich schlau werde ich daraus immer noch nicht

Für mich suchst du sowas: 
http://de3.php.net/manual/de/ref.sockets.php#43155

Der wiport ist der Client der auf den Server zugreifen soll der in der 
XAMPP Umgebung läuft?

Man könnte sicherlich auch mit dem Apache arbeiten und dem sagen das er 
auf Port 10000 lauschen soll und dann immer einen bestimmten Script 
ausführen soll. Da du aber vermutlich keinen richtigen HTTP Request 
machst wird das deutlich komplizierter als eine einfache PHP Lösung.

Wie hast du es den zurzeit am laufen?

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe im Augenblick den Wiport und Server am laufen.
Ich bau nun mit dem Wiport zu dem Server (xxx.xxx.xxx.xxx:10001) eine 
TCP Verbindung auf. Der Damon auf dem Server wird nun ausgelöst und 
führt das Script aus. Das Script versucht die Webseiteabzuparsen die auf 
dem Wiport angezeigt werden sollte.
Nun ist aber das Problem, das der Wiport die Verbindung hält und der 
Wiport keine 2. Verbindung vom Server zuläst...
Es ist doch verzwickt...

Patti

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was läuft den als Daemon?

Sobald einer der beiden Teilnehmer die Verbindung beendet ist die 
Verbindung tot, spätestens nach dem Timeout.

Oder baut der Wiport direkt eine neue Verbindung auf? Dann scheint mir 
das eher ein Konfigurationproblem des Wiports zu sein.

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das, wer als Daemon läuft? Der Daemon läuft auf dem Server 
(Xampp) und der Wiport ist auch nur ein kleines Modul, welches serielle 
Daten per Webseite darstellt und per Wlan erreichbar ist. Also auf 
keinen Fall mit nem Server oder so was großem vergleichbar ist.
Wie kann ich denn eine Verbindung serverseitig schließen, die der Server 
nichtselbstständig geöffnet hat.

Gruß Patti

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du in diesem Fall mit Daemon = Webserver = Apache?

EDIT:
Ein paar mehr Details wären vielleicht nicht schlecht, ich bin mir immer 
noch nicht sicher was welche Daten an was schickt, etc.

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der Daemon läuft auf dem XAMPP-Server!
Dieser Server wartet also auf einen eingehende Verbindung vom Wiport und 
soll darauf hin die vom Wiport generierte Webseite abparsen.

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute stark das es ein Konfigurationsproblem mit dem Wiport ist.

Versuch's mal mit "Connection: close" im HTTP Header.
Dann wird die Verbindung nach jedem Request gekillt.
Ansonsten ist es erlaubt mehrere HTTP Requests über eine Verbindung zu 
machen.
Normalerweise werden diese persistent connections aber nach 15 Sekunden 
Inaktivität vom Apache gekillt.
Der Wiport schickt aber anscheinend kontinuierlich neue Requests...
Das hat nichts mit XAMPP/Apache/Deamon, etc. zu tun, sondern nur mit dem 
Client, dem Wiport.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patti wrote:
> Ja, der Daemon läuft auf dem XAMPP-Server!
> Dieser Server wartet also auf einen eingehende Verbindung vom Wiport und
> soll darauf hin die vom Wiport generierte Webseite abparsen.

Was hast du denn mit dem Wort "Daemon"? Das ist nix anderes als ein 
Hintergrunddienst jeglicher Art. (http://de.wikipedia.org/wiki/Daemon)

Es gibt außerdem keinen XAMPP-Server.

XAMPP ist eine Sammlung aus Webserver (Apache inkl. php), MySQL 
Datenbank und noch ein paar anderen Dingen.

Für mich ist nicht so ganz erkennbar was du wirklich vorhast. Auch 
scheinst du nicht so ganz zu wissen, wie Client/Server Systeme aufgebaut 
sind (Einer horcht, ein anderer baut eine Verbindung auf)

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werd morgen den Wiport noch mal durchchecken...das Handbuch ist für 
solche Optionen allerdings sehr mager. Conection Close hatte ich auch 
schon ausprobiert brachte aber keinen Erfolg, leider.

Gruß & schönen Abend.

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@simon
Vielleicht habe ich das einwenig "unpräzise" beschrieben, aber Dein Post 
ist ja auch nun nicht gerade hilfreich.
Ich komme nun mal nicht aus der Netzwerktechnik.
Ist der Wiport als Server zu sehen, wenn er die TCP Verbindung zum 
Server aufbaut? Ocder doch nur ein Client der einen Dienst des Severs in 
Anspruch nimmt? Definitv ist doch der Apache der Server und auf ihm 
läuft der Hintergrunddienst der "Daemon" . Dieser führt einem ihm 
zugeordneten Befehl aus. In meinem Fall soll er eine PHP Datei 
ausführen.
Das tut er auch. Aber es sieht so aus als ob der Server, welcher jetzt 
als Client fungiert die Verbindung zum Wiport, der jetzt wiederum als 
Server fungiert und ein HTML -Seite zur Verfügung stellt, nicht aufbauen 
kann.
Dazu müßte ich die bestehende TCP Verbindung von der ersten Anfrage (die 
den Doemon auslöst) beenden. Das ging bis jetzt leider nicht so richtig.

Gruß Patti

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patti wrote:
> Ist der Wiport als Server zu sehen, wenn er die TCP Verbindung zum
> Server aufbaut?

Nein.

> Ocder doch nur ein Client der einen Dienst des Severs in
> Anspruch nimmt?

Ja.

> Definitv ist doch der Apache der Server und auf ihm
> läuft der Hintergrunddienst der "Daemon" . Dieser führt einem ihm
> zugeordneten Befehl aus. In meinem Fall soll er eine PHP Datei
> ausführen.

Was denn für ein Daemon? Apache ist ein Daemon, der mySQL Serverdienst 
ist auch ein Daemon.
Daemon ist nur ein Oberbegriff.

> Das tut er auch. Aber es sieht so aus als ob der Server, welcher jetzt
> als Client fungiert die Verbindung zum Wiport, der jetzt wiederum als
> Server fungiert und ein HTML -Seite zur Verfügung stellt, nicht aufbauen
> kann.

Der Webserver baut zum Wiport eine Verbindung auf und stellt eine 
HTML-Seite zur Verfügung, die der Wiport wiederum nicht aufbauen kann?
Ziemlich verstrickt deine Sache da. Irgendwie passt das nicht so richtig

> Dazu müßte ich die bestehende TCP Verbindung von der ersten Anfrage (die
> den Doemon auslöst) beenden. Das ging bis jetzt leider nicht so richtig.

Ein Daemon reagiert eigentlich nur auf Verbindungen, und baut nicht 
selbstständig welche auf. (Zumindest nicht ohne eine Aufforderung von 
einem Client).
Zumindest in der Regel ist das so.


Was spricht denn dagegen den Wiport eine Verbindung zum Webserver 
aufzubauen, einen GET-Request zu schicken, um eine Seite anzufordern und 
diese dann lokal auf dem Wiport zu speichern. Jetzt kann irgendein 
Browser auf den Wiport zugreifen und sich diese Seite anschauen.

PS: Ich glaube hier hat immernoch niemand so richtig verstanden, was du 
mit dem WiPort überhaupt vorhast.

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck mal im access log (.../xampp/apache/logs/access.log) vom Apache, 
dann siehste auch genau was da von wo reinkommt.

Wie ich das jetzt verstanden habe:
Der wiport hat einen kleinen Webserver auf dem man Daten per HTML 
anzeigen lassen kann.
Gleichzeitig kann der wiport auch als Client fungieren.

Dein Apache (xampp) Server lauscht auf Port 10001 auf einen Request des 
wiports. Die aufgerufene PHP Datei stellt mittels fsockopen eine 
Verbindung zum Webserver des wiport her und holt sich die Daten ab und 
macht damit dann irgendwas.

So könntest du z.B. irgendwie eine endlos Schleife ausführen, wenn der 
wiport durch das abrufen der Daten dazu veranlasst würde einen weiteren 
request an den Apache zu schicken. Das würde dein Problem erklären.

Um das Problem zu lösen würde ich dir empfehlen die Daten die der PHP 
Script verarbeiten soll direkt in einem rutsch (per HTTP POST Request) 
vom wiport an den Script zu schicken. Das ist resourcensparender und 
auch weniger Fehleranfälliger da nur eine Verbindung aufgebaut wird.

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hatte mit mit netstat die Verbindungen anzeigen lassen. Einige 
vom Wiport zum Server hatten FIN_WAIT_1 und noch eine war glaube ich mit 
dem Server verbunden. In der acces Log hat mir mein Admin dann gezeigt, 
dass der Dienst, der das PHP Script ausführt, immer wieder angestoßen 
wurde.
Ich könnte morgen die Meldungen genau posten.
Das mit HTTP Post Request geht leider nicht (bzw. ich wüste nicht wie).
Ich kann zB. kein Get oder Post benutzen, da ich ja die Daten nicht 
schicken kann.
Aber ich bin auch nicht so tief in der Materie (Server & Protokolle) :-) 
.

Gruß Patti

Autor: F. Kriewitz (freddy436)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, jo ok, wenn die Daten zum Zeitpunkt des Anstoßens nicht verfügbar 
(Wo kommen die den her???) sind dann musst du wohl deine hin und her 
Methode benutzen. Dann musst du nur feststellen was die andauernden 
requests verursacht ;)

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich meld mich dann morgen nochmal zum Thema :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.