php socket 程式設計今天看到篇好的文章,把主要部分翻譯出來給大家一起分享,譯的不好,請悟見笑,如果有翻譯錯誤的地方請大蝦指出,小第隨時更正!!!
contributed by icarus, (c) melonfire
------"序言(省略了,有時間再加上)"------
讓我們以乙個簡單的例子開始---乙個接收輸入字串,處理並返回這個字串到客戶端的tcp服務.下面是相應的**:
php **:
// 設定一些基本的變數
$host
= "192.168.1.99"
; $port
= 1234
; // 設定超時時間
set_time_limit(0
); // 建立乙個socket
$socket
= socket_create
(af_inet
, sock_stream, 0
) or die(
"could not create
socket/n"
); //繫結socket到埠
$result
= socket_bind
($socket
, $host
, $port
) or die(
"could not bind to
socket/n"
); // 開始監聽鏈結
$result
= socket_listen
($socket, 3
) or die(
"could not set up socket
listener/n"
); // accept incoming connections
// 另乙個socket來處理通訊
$spawn
= socket_accept
($socket
) or die(
"could not accept incoming
connection/n"
); // 獲得客戶端的輸入
$input
= socket_read
($spawn
, 1024
) or die(
"could not read input/n"
); // 清空輸入字串
$input
= trim
($input
); //處理客戶端輸入並返回結果
$output
= strrev
($input
) .
"/n"
; socket_write
($spawn
, $output
, strlen
($output
)) or die(
"could not write
output/n"
); // 關閉sockets
socket_close
($spawn
); socket_close
($socket
); ?>
下面是其每一步驟的詳細說明:
1.第一步是建立兩個變數來儲存socket執行的伺服器的ip位址和埠.你可以設定為你自己的伺服器和埠(這個埠可以是1到65535之間的數字),前提是這個埠未被使用.
php **:
// 設定兩個變數
$host
= "192.168.1.99"
; $port
= 1234
; ?>
2.在伺服器端可以使用set_time_out()函式來確保php在等待客戶端連線時不會超時.
php **:
// 超時時間
set_time_limit(0
); ?>
3.在前面的基礎上,現在該使用socket_creat()函式建立乙個socket了---這個函式返回乙個socket控制代碼,這個控制代碼將用在以後所有的函式中.
php **:
// 建立socket
$socket
= socket_create
(af_inet
, sock_stream, 0
) or die(
"could not create
socket/n"
); ?>
第乙個引數"af_inet"用來指定網域名稱;
第二個引數"sock_strem"告訴函式將建立乙個什麼型別的socket(在這個例子中是tcp型別)
因此,如果你想建立乙個udp socket的話,你可以使用如下的**:
php **:
// 建立 socket
$socket
= socket_create
(af_inet
, sock_dgram, 0
) or die(
"could not create
socket/n"
); ?>
php **:
// 繫結 socket to 指定位址和埠
$result
= socket_bind
($socket
, $host
, $port
) or die(
"could not bind to
socket/n"
); ?>
5.當socket被建立好並繫結到乙個埠後,就可以開始監聽外部的連線了.php允許你由socket_listen()函式來開始乙個監聽,同時你可以指定乙個數字(在這個例子中就是第二個引數:3)
php **:
// 開始監聽連線
$result
= socket_listen
($socket, 3
) or die(
"could not set up socket
listener/n"
); ?>
6.到現在,你的伺服器除了等待來自客戶端的連線請求外基本上什麼也沒有做.一旦乙個客戶端的連線被收到,socket_assept()函式便開始起作用了,它接收連線請求並呼叫另乙個子socket來處理客戶端--伺服器間的資訊.
php **:
//接受請求鏈結
// 呼叫子socket 處理資訊
$spawn
= socket_accept
($socket
) or die(
"could not accept incoming
connection/n"
); ?>
這個子socket現在就可以被隨後的客戶端--伺服器通訊所用了.
7.當乙個連線被建立後,伺服器就會等待客戶端傳送一些輸入資訊,這寫資訊可以由socket_read()函式來獲得,並把它賦值給php的$input變數.
php **:
// 讀取客戶端輸入
$input
= socket_read
($spawn
, 1024
) or die(
"could not read input/n"
); ?>
socker_read的第而箇引數用以指定讀入的位元組數,你可以通過它來限制從客戶端獲取資料的大小.
注意:socket_read函式會一直讀取殼戶端資料,直到遇見/n,/t或者/0字元.php指令碼把這寫字元看做是輸入的結束符.
8.現在伺服器必須處理這些由客戶端發來是資料(在這個例子中的處理僅僅包含資料的輸入和回傳到客戶端).這部分可以由socket_write()函式來完成(使得由通訊socket發回乙個資料流到客戶端成為可能)
php **:
// 處理客戶端輸入並返回資料
$output
= strrev
($input
) .
"/n"
; socket_write
($spawn
, $output
, strlen
($output
)) or die(
"could not write
output/n"
); ?>
9.一旦輸出被返回到客戶端,父/子socket都應通過socket_close()函式來終止
php **:
// 關閉 sockets
socket_close
($spawn
); socket_close
($socket
); ?>
轉http://club.21php.com/showthread.php?t=14308
PHP 多執行緒
php 5.3 以上版本,使用pthreads php擴充套件,可以使php真正地支援多執行緒。多執行緒在處理重複性的迴圈任務,能夠大大縮短程式執行時間。cd data tgz php 5.5.1 make clean make make install unzip pthreads master....
PHP多執行緒的實現(PHP多執行緒類)
通過web伺服器來實現php多執行緒功能。當然,對多執行緒有深入理解的人都知道通過web伺服器實現的多執行緒只能模仿多執行緒的一些效果,並不是真正意義上的多執行緒。但不管怎麼樣,它還是能滿足我們的一些需要的,在需要類似多執行緒的功能方面還是可以採用這個類。view source print?01.0...
php 開啟多執行緒 php如何實現多執行緒
php中可以實現多執行緒,是一種利用舊的exec函式通過非同步處理方法實現多執行緒的,exec函式本身就是乙個執行外部程式的php函式。下面我們就來具體看看php多執行緒的實現方法。我們首先來看乙個示例 class execmulti function multithreadtest exec ph...