먼저 특정 포트를 듣고 연결을 수락하며 간단하게 응답하는 간단한 PHP 소켓 서비스 스크립트가 필요합니다.
<?php
// 만들다 TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() 실패하다: " . socket_strerror(socket_last_error()) . "\n");
}
// 주소와 포트 바인드
$address = "0.0.0.0";
$port = 12345;
if (socket_bind($socket, $address, $port) === false) {
die("socket_bind() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// 연결을 듣습니다
if (socket_listen($socket, 5) === false) {
die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "서비스가 시작되었습니다,포트를 들어보세요 $port\n";
// 루프에서 클라이언트 연결을받습니다
while (true) {
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
$message = "Connect에 오신 것을 환영합니다 m66.net PHP Socket 제공하다!\n";
socket_write($clientSocket, $message, strlen($message));
socket_close($clientSocket);
}
socket_close($socket);
?>
이 스크립트는 머신의 12345 포트에 리스닝하고 클라이언트 연결을 수락하고 환영 메시지를 보내고 연결을 닫습니다.
위의 PHP 스크립트가 /usr/local/bin/php-socket-server.php 로 저장되었다고 가정하면 관리하려면 SystemD 서비스 파일을 작성해야합니다.
컨텐츠와 함께 새 서비스 파일 /etc/systemd/system/php-socket-server.service 를 만듭니다.
[Unit]
Description=PHP Socket 제공하다
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/php /usr/local/bin/php-socket-server.php
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=php-socket-server
[Install]
WantedBy=multi-user.target
설명 :
execstart는 시스템의 PHP 통역사를 사용하여 스크립트를 실행하도록 시작 명령을 지정합니다.
다시 시작 = 항상 충돌 후 서비스가 자동으로 다시 시작되도록합니다.
RestartSec = 5는 재시작의 5 초 간격을 나타냅니다.
StandardOutput 및 StandardError 는 문제 해결을 쉽게하기 위해 SYSLOG (Systion Log)에 출력됩니다.
syslogidentifier 로그 식별자를 설정합니다.
다음 명령을 실행하여 서비스를 발효하고 시작하십시오.
sudo systemctl daemon-reload
sudo systemctl enable php-socket-server.service
sudo systemctl start php-socket-server.service
서비스 상태 확인 :
sudo systemctl status php-socket-server.service
서비스가 정상적으로 실행중인 경우 Telnet 또는 NetCat을 사용하여 테스트에 연결할 수 있습니다.
telnet 127.0.0.1 12345
환영 메시지를보아야합니다.
Connect에 오신 것을 환영합니다 m66.net PHP Socket 제공하다!
로그 관리 : PHP 스크립트에서 로깅 함수를 추가하거나 RSYSLOG를 사용하여 PHP-Socket-Server 식별자를 필터링하여 로그의보기를 용이하게하는 것이 좋습니다.
보안 : 실제 요구에 따라 방화벽 규칙을 설정하면 신뢰할 수있는 IP만이 포트에 액세스 할 수 있습니다.
서비스 권한 : SystemD 서비스 파일의 사용자 및 그룹 필드를 구성하여 루트로 실행되지 않고 보안을 향상시킬 수 있습니다.
코드 견고성 : 서비스 스크립트에 신호 처리 (예 : PCNTL_Signal )를 추가하여 우아한 종료를 달성합니다.