php多執行緒

2021-04-16 23:08:52 字數 4851 閱讀 5071

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...