사물 인터넷 (IoT) 프로젝트에서 서버는 일반적으로 장치에서 업로드 한 데이터를 실시간으로 수신해야합니다. 이러한 장치는 TCP 연결을 사용하여 센서 데이터, 상태 정보 등을 서버로 전송할 수 있습니다. PHP는 전통적인 의미에서 네트워크 프로그래밍에 선호되는 언어는 아니지만 내장 소켓 확장을 통해이 작업에 유능할 수도 있습니다. 이 기사는 Socket_accept () 함수를 사용하여 IoT 장치에서 데이터를 수신하고 기본 처리를 수행하는 방법을 소개합니다.
먼저 PHP 환경에 소켓 확장 기능이 활성화되어 있는지 확인하십시오. phpinfo ()를 실행하여 활성화되는지 확인할 수 있습니다.
기본 TCP 소켓 서버를 만드는 단계는 다음과 같습니다.
<?php
// 서버 주소 및 포트 설정
$host = '0.0.0.0';
$port = 8888;
// 만들다 socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
die("无法만들다 socket:" . socket_strerror(socket_last_error()));
}
// 묶다 socket 도착하다 IP 그리고 포트
if (!socket_bind($socket, $host, $port)) {
die("묶다실패하다:" . socket_strerror(socket_last_error($socket)));
}
// 연결을 듣기 시작하십시오
if (!socket_listen($socket)) {
die("듣기 실패:" . socket_strerror(socket_last_error($socket)));
}
echo "서버가 시작되었습니다,장치가 연결될 때까지 기다립니다...\n";
socket_accept ()를 사용하여 연결을받습니다. 이 기능은 장치 연결이있을 때까지 차단합니다.
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept 실패하다:" . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
echo "장치가 연결되어 있습니다。\n";
// 장치에서 보낸 데이터를 읽습니다
$input = socket_read($clientSocket, 1024);
if ($input === false) {
echo "读取실패하다:" . socket_strerror(socket_last_error($clientSocket)) . "\n";
} else {
echo "接收도착하다数据:$input\n";
// 데이터가 있다고 가정합니다 JSON 체재,디코딩을 수행하십시오
$data = json_decode(trim($input), true);
if (json_last_error() === JSON_ERROR_NONE) {
// 예:온도 센서 데이터 처리
if (isset($data['device_id'], $data['temperature'])) {
$deviceId = $data['device_id'];
$temperature = $data['temperature'];
// 假设保存도착하다数据库或执行其他处理逻辑
echo "장비 $deviceId 온도 업로드:$temperature °C\n";
// 처리 결과를 반환하십시오
$response = json_encode(['status' => 'ok']);
socket_write($clientSocket, $response);
} else {
echo "收도착하다非法数据。\n";
}
} else {
echo "JSON 解码실패하다。\n";
}
}
// 현재 연결을 닫습니다
socket_close($clientSocket);
}
socket_close($socket);
IoT 장치는 TCP 연결 만 설정하고 JSON 형식으로 데이터를 업로드하면됩니다. 예를 들어:
{
"device_id": "sensor_001",
"temperature": 25.6
}
데이터는 TCP 클라이언트 (예 : ESP8266의 Arduino 프로그램, Python Socket 또는 CURL)를 통해 서버의 M66.NET:8888 주소로 보낼 수 있습니다.
보안 : TLS와 같은 암호화 (예 : 생산 환경에서 데이터를 전송하는 것이 좋습니다.
동시성 처리 : PCNTL_FORK ()를 사용하여 여러 연결을 처리하기 위해 자식 프로세스를 생성하는 것을 고려하십시오.
데이터 지속성 : 장치 데이터는 MySQL, Redis 또는 로그 파일에 기록 될 수 있습니다.
PHP는 소켓 프로그래밍을 위해 설계되지 않았지만 개발자는 Socket_accept () 와 같은 내장 기능을 갖춘 간단하고 실용적인 IoT 데이터를 신속하게 구축 할 수 있습니다. 소규모 장치 통신 및 테스트 환경에서는 PHP 사용이 완전히 가능합니다. 이 기사가 IoT 데이터를 처리하기 위해 Socket_accept ()를 더 잘 이해하고 적용하는 데 도움이되기를 바랍니다.