In Internet of Things (IoT) -Projekten muss der Server normalerweise Daten in Echtzeit hochgeladen werden. Diese Geräte können eine TCP -Verbindung verwenden, um Sensordaten, Statusinformationen usw. an den Server zu senden. Obwohl PHP im traditionellen Sinne nicht die bevorzugte Sprache für die Netzwerkprogrammierung ist, kann es auch für diese Aufgabe durch seine integrierte Socket-Erweiterung kompetent sein. In diesem Artikel wird vorgestellt, wie Sie die Funktion socket_accept () verwenden, um Daten von IoT -Geräten zu empfangen und eine grundlegende Verarbeitung durchzuführen.
Stellen Sie zunächst sicher, dass Ihre PHP -Umgebung die Sockets -Erweiterung aktiviert hat. Sie können bestätigen, ob es durch Ausführen von Phpinfo () aktiviert ist.
Hier sind die Schritte zum Erstellen eines grundlegenden TCP -Socket -Servers:
<?php
// Einrichten des Serveradresses und des Ports
$host = '0.0.0.0';
$port = 8888;
// erstellen socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
die("无法erstellen socket:" . socket_strerror(socket_last_error()));
}
// Binden socket ankommen IP und Ports
if (!socket_bind($socket, $host, $port)) {
die("Bindenscheitern:" . socket_strerror(socket_last_error($socket)));
}
// Hören Sie sich die Verbindung an
if (!socket_listen($socket)) {
die("Zuhören fehlgeschlagen:" . socket_strerror(socket_last_error($socket)));
}
echo "Der Server hat begonnen,Warten Sie, bis das Gerät eine Verbindung herstellt...\n";
Verwenden Sie Socket_accept (), um die Verbindung zu empfangen. Diese Funktion blockiert, bis eine Geräteverbindung besteht:
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept scheitern:" . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
echo "Das Gerät ist angeschlossen。\n";
// Lesen Sie die vom Gerät gesendeten Daten
$input = socket_read($clientSocket, 1024);
if ($input === false) {
echo "读取scheitern:" . socket_strerror(socket_last_error($clientSocket)) . "\n";
} else {
echo "接收ankommen数据:$input\n";
// Angenommen, die Daten sind JSON Format,Dekodierung durchführen
$data = json_decode(trim($input), true);
if (json_last_error() === JSON_ERROR_NONE) {
// Beispiel:Verarbeitungstemperatursensordaten
if (isset($data['device_id'], $data['temperature'])) {
$deviceId = $data['device_id'];
$temperature = $data['temperature'];
// 假设保存ankommen数据库或执行其他处理逻辑
echo "Ausrüstung $deviceId Temperatur hochladen:$temperature °C\n";
// Geben Sie das Verarbeitungsergebnis zurück
$response = json_encode(['status' => 'ok']);
socket_write($clientSocket, $response);
} else {
echo "收ankommen非法数据。\n";
}
} else {
echo "JSON 解码scheitern。\n";
}
}
// Schließen Sie die aktuelle Verbindung
socket_close($clientSocket);
}
socket_close($socket);
Das IoT -Gerät muss nur eine TCP -Verbindung herstellen und Daten im JSON -Format hochladen. Zum Beispiel:
{
"device_id": "sensor_001",
"temperature": 25.6
}
Daten können über TCP -Clients (z.
Sicherheit : Es wird empfohlen, die Verschlüsselung (z. B. TLS) zu verwenden, um Daten in Produktionsumgebungen zu übertragen.
Parallelitätsverarbeitung : Erwägen Sie , pcntl_fork () zu verwenden, um einen untergeordneten Prozess zu erstellen, um mehrere Verbindungen zu verarbeiten.
Datenpersistenz : Gerätedaten können in MySQL-, Redis- oder Protokolldateien geschrieben werden.
Obwohl PHP nicht für die Socket-Programmierung ausgelegt ist, können Entwickler schnell einen einfachen und praktischen IoT-Datenempfängerserver mit integrierten Funktionen wie Socket_accept () erstellen. In kleinen Gerätekommunikations- und Testumgebungen ist die Verwendung von PHP vollständig machbar. Hoffentlich hilft Ihnen dieser Artikel , Socket_accept () besser zu verstehen und anzuwenden, um IoT -Daten zu verarbeiten.