PHP Socket 程式設計詳解

2021-06-29 08:31:16 字數 2024 閱讀 4658

最近在做的專案有一項需要耗時任務在後台執行的功能,雖然php並不是非常適合做常駐後台的守護程序,但是由於專案主要**都是基於php實現,如 果執行在後台的守護程序改換別的語言會非常不方便。所以不可避免會涉及到web端和daemon部分的通訊,socket是乙個不錯的方式。

socket的英文原義是「孔」或「插座」。作為bsd unix的程序通訊機制,取後一種意思。通常也稱作」套接字」,用於描述ip位址和埠,是乙個通訊鏈的控制代碼。在internet上的主機一般執行了多個 服務軟體,同時提供幾種服務。每種服務都開啟乙個socket,並繫結到乙個埠上,不同的埠對應於不同的服務。

簡單說來,socket可以幫助不同的服務在不同的埠進行通訊。

### 服務端

<?php set_time_limit(0);

// 設定主機和埠

$host = "127.0.0.1";

$port = 12387;

// 建立乙個tcp流

$socket = socket_create(af_inet, sock_stream, sol_tcp)

or die("socket_create() failed:" . socket_strerror(socket_last_error()));

// 設定阻塞模式

socket_set_block($socket)

or die("socket_set_block() failed:" . socket_strerror(socket_last_error()));

// 繫結到埠

socket_bind($socket, $host, $port)

or die("socket_bind() failed:" . socket_strerror(socket_last_error()));

// 開始監聽

socket_listen($socket, 4)

or die("socket_listen() failed:" . socket_strerror(socket_last_error()));

echo "binding the socket on $host:$port ... \n";

while (true) else

// 寫資料

$in = "資料是 $out";

socket_write($msgsock, $in, strlen($in));

}// 結束通訊

socket_close($msgsock);

}socket_close($socket);

?>

服務端主要進行了以下步驟:

<?php 

set_time_limit(0);

$host = "127.0.0.1";

$port = 12387;

// 建立乙個tcp流

$socket = socket_create(af_inet, sock_stream, sol_tcp)

or die("socket_create() failed:" . socket_strerror(socket_last_error()));

echo "try to connect to $host:$port...\n";

$result = socket_connect($socket, $host, $port)

or die("socket_connect() failed:" . socket_strerror(socket_last_error()));

$in = "hello \n";

if(!socket_write($socket, $in, strlen($in))) else

$out = '';

while($buf = socket_read($socket, 8192))

echo "接受內容為:$out \n";

socket_close($socket);

?>

客戶端主要有以下步驟:

PHP SOCKET程式設計!

server.php php 確保在連線客戶端時不會超時 set time limit 0 設定ip和埠號 address 伺服器自己的ip port 埠號 建立乙個socket if sock socket create af inet sock stream sol tcp 0 繫結到socke...

php socket函式詳解

最近在用socket實現服務端向客戶端主動推送訊息 函式名 描述 socket accept 接受乙個socket連線 socket bind 把socket繫結在乙個ip位址和埠上 socket clear error 清除socket的錯誤或最後的錯誤 socket close 關閉乙個sock...

php socket程式設計通訊

我們程式設計就是按這個順序的,請看下面的圖 建立乙個連線 socket socket create af inet,sock stream,sol tcp or die cannot create socket n 繫結socket到埠 result socket bind socket,host,...