真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

為什么php不適合socket

這篇文章運(yùn)用簡單易懂的例子給大家介紹為什么php不適合socket,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作與策劃設(shè)計(jì),康平網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:康平等地區(qū)。康平做網(wǎng)站價(jià)格咨詢:18982081108

 作為一名非底層程序員,要想深入了解socket的內(nèi)部實(shí)現(xiàn)機(jī)制是很困難的,我們只需明白socket是一套操作系統(tǒng)封裝好的實(shí)現(xiàn)進(jìn)程通信的函數(shù),會創(chuàng)建和調(diào)用就夠了。

PHP的語言特性和自身定位決定了它只適合做socket客戶端,而不適合做socket服務(wù)器端。

因?yàn)閟ocket主要面向底層和網(wǎng)絡(luò)服務(wù)開發(fā),一般服務(wù)器端都是用 C 或 Java 等語言實(shí)現(xiàn),這樣能更好地操作底層,對網(wǎng)絡(luò)服務(wù)開發(fā)中遇到的問題(如并發(fā)、阻塞等)也有成熟完善的解決方案,而PHP顯然不適合這種應(yīng)用場景。 

實(shí)際上,PHP操作MySQL數(shù)據(jù)庫也是通過socket進(jìn)行的,這正是由于socket屏蔽了底層的協(xié)議,使得網(wǎng)絡(luò)服務(wù)之間的互聯(lián)互通變得簡單。

除了傳統(tǒng)的服務(wù)器端語言實(shí)現(xiàn)的socket外,隨著HTML5的流行,瀏覽器客戶端實(shí)現(xiàn)的WebSocket也逐漸興起,對于這一點(diǎn)值得關(guān)注,F(xiàn)lashSocket也是一個(gè)不錯(cuò)的解決方案。

要在客戶端操作socket,可使用fsockopen、socket_create 或 stream_socket_client 等函數(shù)實(shí)現(xiàn),如果是PHP5,推薦使用stream_socket_client。

socket交互應(yīng)用實(shí)例:使用socket提交表單

新建一個(gè) test.php 文件,向 http://demo.com/index.php?id=1  提交表單數(shù)據(jù),代碼如下:

'this is a robot comment');
$data = http_build_query($data);
 
$out = "POST http://demo.com/index.php?id=1 HTTP/1.1\r\n";  // 通過POST方式發(fā)送數(shù)據(jù)
$out .= "Host: demo.com\r\n";
$out .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
$out .= "Content-length: ".strlen($data)."\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."\r\n";
$out .= "Connection: close"."\r\n"."\r\n";    // 注意:此處有兩個(gè) \r\n
 
$out .= $data."\r\n";   // 正文數(shù)據(jù)
 
$fp = fsockopen("demo.com", 80, $errno, $errstr, 30);  // 創(chuàng)建socket客戶端連接
 
// $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30);  推薦這種寫法
 
fwrite($fp, $out);    // 向服務(wù)器發(fā)送數(shù)據(jù)
 
while (!feof($fp)) {
    echo fgets($fp, 1280);    // 讀取服務(wù)器響應(yīng)的數(shù)據(jù)
}
fclose($fp);  // 關(guān)閉socket連接
?>

需要注意以下幾點(diǎn):

fsockopen的第一個(gè)參數(shù),也可以使用IP地址,不要帶 http:// 字符串,除非使用SSL等

請求頭(headers)不一定要帶上所有的頭域,一般只需帶上幾個(gè)核心的header即可

在最后一個(gè)header處,即 Connection 后有兩個(gè)換行

注意編碼問題

關(guān)于為什么php不適合socket就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)頁題目:為什么php不適合socket
本文路徑:http://weahome.cn/article/gghjdg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部