Dans les projets Internet des objets (IoT), le serveur doit généralement recevoir des données téléchargées par l'appareil en temps réel. Ces appareils peuvent utiliser une connexion TCP pour envoyer des données de capteur, des informations d'état, etc. au serveur. Bien que PHP ne soit pas le langage préféré de la programmation réseau au sens traditionnel, il peut également être compétent pour cette tâche grâce à son extension de socket intégrée. Cet article présentera comment utiliser la fonction socket_accept () pour recevoir des données des appareils IoT et effectuer un traitement de base.
Tout d'abord, assurez-vous que votre environnement PHP a une extension de sockets activée. Vous pouvez confirmer s'il est activé en exécutant phpinfo () ;.
Voici les étapes pour créer un serveur de socket TCP de base:
<?php
// Configuration de l'adresse du serveur et du port
$host = '0.0.0.0';
$port = 8888;
// créer socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
die("无法créer socket:" . socket_strerror(socket_last_error()));
}
// Lier socket arriver IP et ports
if (!socket_bind($socket, $host, $port)) {
die("Lieréchouer:" . socket_strerror(socket_last_error($socket)));
}
// Commencez à écouter la connexion
if (!socket_listen($socket)) {
die("L'écoute a échoué:" . socket_strerror(socket_last_error($socket)));
}
echo "Le serveur a commencé,Attendez que l'appareil se connecte...\n";
Utilisez socket_accept () pour recevoir la connexion. Cette fonction bloque jusqu'à ce qu'il y ait une connexion de périphérique:
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept échouer:" . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
echo "L'appareil est connecté。\n";
// Lire les données envoyées par l'appareil
$input = socket_read($clientSocket, 1024);
if ($input === false) {
echo "读取échouer:" . socket_strerror(socket_last_error($clientSocket)) . "\n";
} else {
echo "接收arriver数据:$input\n";
// Supposer que les données sont JSON Format,Effectuer le décodage
$data = json_decode(trim($input), true);
if (json_last_error() === JSON_ERROR_NONE) {
// Exemple:Traitement des données du capteur de température
if (isset($data['device_id'], $data['temperature'])) {
$deviceId = $data['device_id'];
$temperature = $data['temperature'];
// 假设保存arriver数据库或执行其他处理逻辑
echo "équipement $deviceId Télécharger la température:$temperature °C\n";
// Retourner le résultat de traitement
$response = json_encode(['status' => 'ok']);
socket_write($clientSocket, $response);
} else {
echo "收arriver非法数据。\n";
}
} else {
echo "JSON 解码échouer。\n";
}
}
// Fermez la connexion actuelle
socket_close($clientSocket);
}
socket_close($socket);
Le périphérique IoT n'a besoin que d'établir une connexion TCP et de télécharger des données au format JSON. Par exemple:
{
"device_id": "sensor_001",
"temperature": 25.6
}
Les données peuvent être envoyées à l'adresse M66.net:8888 du serveur via des clients TCP (tels que le programme Arduino de ESP8266, Python Socket ou même Curl).
Sécurité : Il est recommandé d'utiliser le chiffrement (tel que TLS) pour transmettre des données dans des environnements de production.
Traitement de la concurrence : envisagez d'utiliser pcntl_fork () pour créer un processus enfant pour gérer plusieurs connexions.
Persistance des données : les données de l'appareil peuvent être écrites dans les fichiers MySQL, Redis ou journaux.
Bien que PHP ne soit pas conçu pour la programmation de socket, les développeurs peuvent rapidement créer un serveur de réception de données IoT simple et pratique avec des fonctions intégrées telles que socket_accept () . Dans les environnements de communication et de test des appareils à petite échelle, l'utilisation de PHP est complètement possible. J'espère que cet article vous aidera à mieux comprendre et appliquer socket_accept () pour traiter les données IoT.