這篇文章運用簡單易懂的例子給大家介紹為什么php不適合socket,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創新互聯是一家專注于網站設計制作、成都網站制作與策劃設計,康平網站建設哪家好?成都創新互聯做網站,專注于網站建設十年,網設計領域的專業建站公司;建站業務涵蓋:康平等地區。康平做網站價格咨詢:18982081108
作為一名非底層程序員,要想深入了解socket的內部實現機制是很困難的,我們只需明白socket是一套操作系統封裝好的實現進程通信的函數,會創建和調用就夠了。
PHP的語言特性和自身定位決定了它只適合做socket客戶端,而不適合做socket服務器端。
因為socket主要面向底層和網絡服務開發,一般服務器端都是用 C 或 Java 等語言實現,這樣能更好地操作底層,對網絡服務開發中遇到的問題(如并發、阻塞等)也有成熟完善的解決方案,而PHP顯然不適合這種應用場景。
實際上,PHP操作MySQL數據庫也是通過socket進行的,這正是由于socket屏蔽了底層的協議,使得網絡服務之間的互聯互通變得簡單。
除了傳統的服務器端語言實現的socket外,隨著HTML5的流行,瀏覽器客戶端實現的WebSocket也逐漸興起,對于這一點值得關注,FlashSocket也是一個不錯的解決方案。
要在客戶端操作socket,可使用fsockopen、socket_create 或 stream_socket_client 等函數實現,如果是PHP5,推薦使用stream_socket_client。
socket交互應用實例:使用socket提交表單
新建一個 test.php 文件,向 http://demo.com/index.php?id=1 提交表單數據,代碼如下:
<?php $data = array('comment'=>'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方式發送數據 $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"; // 注意:此處有兩個 \r\n $out .= $data."\r\n"; // 正文數據 $fp = fsockopen("demo.com", 80, $errno, $errstr, 30); // 創建socket客戶端連接 // $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30); 推薦這種寫法 fwrite($fp, $out); // 向服務器發送數據 while (!feof($fp)) { echo fgets($fp, 1280); // 讀取服務器響應的數據 } fclose($fp); // 關閉socket連接 ?>
需要注意以下幾點:
fsockopen的第一個參數,也可以使用IP地址,不要帶 http:// 字符串,除非使用SSL等
請求頭(headers)不一定要帶上所有的頭域,一般只需帶上幾個核心的header即可
在最后一個header處,即 Connection 后有兩個換行
注意編碼問題
關于為什么php不適合socket就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當前名稱:為什么php不適合socket
網站路徑:http://vcdvsql.cn/article16/gghjdg.html
成都網站建設公司_創新互聯,為您提供網頁設計公司、全網營銷推廣、關鍵詞優化、企業建站、品牌網站制作、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯