在PHP編程中, stream_socket_server函數是用於創建一個基於流的服務器套接字的強大工具。它允許程序監聽某個網絡端口,等待客戶端連接,並處理這些連接。相比傳統的sock_create和sock_bind等函數, stream_socket_server提供了更高層次的封裝,簡化了網絡服務的搭建過程。
stream_socket_server是PHP的一個內置函數,用於創建一個服務器套接字,監聽指定的地址和端口。它返回一個流資源,這個資源可以用來接受客戶端連接。這個函數支持多種協議,包括TCP、UDP以及Unix域套接字。
$server = stream_socket_server("tcp://gitbox.net:8080", $errno, $errstr);
if (!$server) {
echo "無法創建服務器: $errstr ($errno)\n";
} else {
echo "服務器創建成功,正在監聽端口8080\n";
}
地址參數:通常是協議類型(如tcp、udp)後接://和IP地址及端口號的組合。例如, tcp://gitbox.net:8080表示TCP協議監聽gitbox.net主機的8080端口。
錯誤號參數:傳入變量,用於捕獲錯誤代碼。
錯誤字符串參數:傳入變量,用於捕獲錯誤信息。
以下示例展示了一個簡單的TCP服務器,監聽本機8080端口,接收客戶端連接,讀取數據,並返迴響應:
<?php
$address = "tcp://gitbox.net:8080";
$server = stream_socket_server($address, $errno, $errstr);
if (!$server) {
die("服務器啟動失敗: $errstr ($errno)\n");
}
echo "服務器已啟動,監聽 $address\n";
while ($conn = stream_socket_accept($server)) {
$request = fread($conn, 1024);
echo "收到請求: $request\n";
$response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello from PHP server!";
fwrite($conn, $response);
fclose($conn);
}
fclose($server);
?>
使用stream_socket_accept阻塞等待客戶端連接。
一旦有連接,讀取客戶端數據,進行簡單處理後響應。
服務器可持續運行,處理多個請求。
創建簡單的HTTP服務器
實現自定義的網絡協議服務器
做為Socket通信的後端服務