まず、特定のポートに耳を傾け、接続を受け入れ、簡単に応答する単純な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)に出力され、簡単にトラブルシューティングが行われます。
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ソケットサーバー識別子をフィルタリングしてログの表示を容易にすることをお勧めします。
セキュリティ:実際のニーズに応じてファイアウォールルールを設定し、信頼できるIPのみがこのポートにアクセスできます。
サービス許可:SystemDサービスファイルのユーザーとグループフィールドを構成して、ルートとして実行し、セキュリティを改善しないようにすることができます。
コードの堅牢性:信号処理( PCNTL_SIGNALなど)を追加してスクリプトに追加して、エレガントなシャットダウンを実現します。