6 Stimmen

Apache - Bearbeitung von TCP-Verbindungen, aber nicht von HTTP-Anfragen

Ich habe ein GPS-Gerät, das Daten über eine TCP-Verbindung senden kann, aber ich habe nicht die Möglichkeit, die gesendete Nachricht so zu ändern, dass sie in Form einer HTTP-Anfrage auf meinem Server ankommt - sie kann nur eine Nachricht in einem vordefinierten Format senden.

Ich habe also folgende Fragen:

1) Ist es möglich, dass der Apache eine TCP-Verbindung verarbeitet, die nicht in Form einer HTTP-Anfrage kommt, und dass die gesendete Nachricht von einem PHP-Skript verarbeitet wird?

2) Wenn Nr. 1 nicht möglich ist, wie sollte ich dann mit den Daten umgehen, die an meinen Server gesendet werden?

Ich werde möglicherweise Hunderte, wenn nicht Tausende dieser GPS-Geräte haben, die Daten an meinen Server senden, so dass ich eine effiziente Möglichkeit benötige, um alle eingehenden Verbindungen zu verarbeiten (deshalb wollte ich Apache oder einen anderen produktionswürdigen Server, der die TCP-Verbindungen verarbeitet). Ich möchte in der Lage sein, die über die Verbindung gesendete Nachricht mit PHP zu verarbeiten, da der Rest meiner Anwendung darauf läuft, und ich muss die gesendeten Daten in eine Datenbank einfügen (und PHP ist wirklich gut darin, diese Art von Dingen zu tun).

Falls es von Bedeutung ist, kann das GPS-Gerät Daten über eine UDP-Verbindung senden, aber soweit ich gelesen habe, funktioniert der Apache nicht mit UDP-Verbindungen.

Für Vorschläge wäre ich dankbar.

3voto

Andrew Sledge Punkte 9879

Um Ihre Fragen zu beantworten:

1) Nicht ohne größere Änderungen

2) Bauen Sie Ihren eigenen Server. Dies ist mit verschiedenen Plattformen und in verschiedenen Sprachen leicht möglich. Ich persönlich verwende gerne die Verdrehter Rahmen weil Python relativ einfach zu benutzen ist und das Framework sehr flexibel ist.

2voto

webbiedave Punkte 47260

Der Einsatz von Apache wäre nicht praktikabel, denn das wäre wie der Einsatz einer Atombombe, wenn ein Feuerwerkskörper ausreicht. Die Einrichtung eines PHP-Servers ist unter Linux mit Hilfe von xinetd recht einfach.

Ändern Sie /etc/services . Angenommen, Sie möchten, dass Ihr Dienst auf Port 56789 läuft. In /etc/services fügen Sie die Zeile:

gpsservice   56789/tcp

Unter /etc/xinet.d/ erstellen Sie eine Datei mit dem Namen gpsservice :

service gpsservice 
{
    socket_type             = stream
    protocol                = tcp
    wait                    = no
    user                    = yourusername
    server                  = /path/to/your/script
    log_on_success          = HOST PID
    disable                 = no
}

Erstellen Sie Ihr PHP-Skript (chmod, damit es ausführbar ist):

#!/usr/bin/php
<?php
// do stuff
?>

xinetd neu starten service xinetd restart

Sie haben nun einen schnellen, in PHP geschriebenen TCP-Server.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X