摘要:那么,是否就無法用來開發雙向通信的應用呢答案是否定的。內置通信支持,可以與程序基于進行雙向通信。通信協議于年被定為標準,并由補充規范。
前言眾所周知,PHP用于開發基于HTTP協議的網站應用非常便捷。而HTTP協議是一種單向的通信協議,只能接收客戶端的請求,然后響應請求,不能主動向客戶端推送信息。因此,一些實時性要求比較高的應用,如實時聊天、直播應用、在線網頁游戲等,就不適合采用HTTP協議。即使采用客戶端主動輪詢的方式來間接實現雙向通信,也會較大地增加服務器的負擔,增大代碼的復雜性,不利于維護。
那么,是否PHP就無法用來開發雙向通信的應用呢?
答案是否定的。PHP內置socket通信支持,可以與linux程序基于socket進行雙向通信。php swoole框架封裝了一個websocket服務端,基于此可以很方便地建立一個與html5的websocket客戶端進行通信的服務。
一、 Swoole介紹Swoole是一個面向生產環境的 PHP 異步網絡通信引擎,使 PHP 開發人員可以編寫高性能的異步并發 TCP、UDP、Unix Socket、HTTP,WebSocket 服務。Swoole 可以廣泛應用于互聯網、移動通信、企業軟件、云計算、網絡游戲、物聯網(IOT)、車聯網、智能家居等領域。 使用 PHP + Swoole 作為網絡通信框架,可以使企業 IT 研發團隊的效率大大提升。
swoole支持用于搭建多種server,包括http server、websocket server、tcp server、redis server等等。這里我們使用到的是其中的websocket server。
二、WebSocket介紹WebSocket是一種在單個TCP連接上進行全雙工通信的協議。WebSocket通信協議于2011年被IETF定為標準RFC 6455,并由RFC7936補充規范。WebSocket API也被W3C定為標準。 WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,并進行雙向數據傳輸。
簡單地來說,websocket協議實現了瀏覽器和服務器之間的雙向通信。而html5原生支持websocket協議。
三、swoole websocket 服務端demoswoole以php擴展的形式進行加載,首先需要為你的php安裝swoole擴展,安裝命令如下:
pecl install swoole
安裝成功后在php.ini文件加上extension=swoole.so加載擴展
新建一個php文件,文件名為server.php,文件內容如下:
$server = new SwooleWebSocketServer("0.0.0.0", 9501);
$server->on("open", function (SwooleWebSocketServer $server, $request) {
echo "server: handshake success with fd{$request->fd}
";
});
$server->on("message", function (SwooleWebSocketServer $server, $frame) {
echo "receive from {$frame->fd}:{$frame->data}
";
$server->push($frame->fd, "this is server");
});
$server->on("close", function ($ser, $fd) {
echo "client {$fd} closed
";
});
$server->on("request", function (SwooleHttpRequest $request, SwooleHttpResponse $response) {
global $server;//調用外部的server
// $server->connections 遍歷所有websocket連接用戶的fd,給所有用戶推送
foreach ($server->connections as $fd) {
// 需要先判斷是否是正確的websocket連接,否則有可能會push失敗
if ($server->isEstablished($fd)) {
$server->push($fd, $request->get["message"]);
}
}
});
$server->start();
此服務監聽本機的9501端口,運行命令 php server.php 啟動服務。
四、HTML5 WebSocket 客戶端demo新建一個testServer.html文件,寫入以下內容:
測試WebSocket
將【服務端IP】替換成swoole服務端ip,保存文件。
五、測試demo(1) 訪問步驟四的客戶端demo頁面,首先與服務端建立連接,查看瀏覽器console log,可以看到顯示:
connected!
(2) 查看linux控制臺,可以看到顯示:
server: handshake success with fd1
(3) 接著客戶端向服務端發了一條消息,服務端控制臺顯示:
receive from fd1:hello server,this is client!
(4) 服務端收到消息后,向客戶端回復了一條消息,客戶端控制臺顯示:
server message:this is server
以上就是基于swoole+websocket開發雙向通信應用的簡單演示,在線聊天、網頁游戲等實時通信的應用也可基于此方式進行開發。php開發效率高,可以更快、更高效地進行此類應用地開發,節約開發成本。
大家如果還有什么疑問,可以關注公眾號“全棧社區”進行提問。
關注微信公眾號“全棧社區”,可獲取更多站長、開發者必備的前端、后端、服務器技術干貨。
旭貓云19元VPS:美國VPS
旭貓云免備案空間:香港云主機
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/6815.html
摘要:那么,是否就無法用來開發雙向通信的應用呢答案是否定的。內置通信支持,可以與程序基于進行雙向通信。通信協議于年被定為標準,并由補充規范。前言 眾所周知,PHP用于開發基于HTTP協議的網站應用非常便捷。而HTTP協議是一種單向的通信協議,只能接收客戶端的請求,然后響應請求,不能主動向客戶端推送信息。因此,一些實時性要求比較高的應用,如實時聊天、直播應用、在線網頁游戲等,就不適合采用HTTP協議...
摘要:早期的輪詢是通過不斷自動刷新頁面而實現的。長輪詢的另一個問題是缺乏標準實現。服務器端接到這個請求后作出回應并不斷更新連接狀態以保證客戶端和服務器端的連接不過期。協議解析協議包含兩部分一部分是握手,一部分是數據傳輸。 Websocket是什么? Websocket是一個因為應用場景越來越復雜而提出的,針對瀏覽器和web服務器之間雙向持續通信而設計,而且優雅地兼容HTTP的協議(我猜想:同...
摘要:目前來看等語言還難以企及和。作為一個資深的開發者,在技術上給各位程序十點未來的建議,希望對大家有所幫助。開發者應當學習掌握規范,在開發程序時應當盡量遵循規范。程序員除了寫后臺程序之外,還有很大一部分工作在展現層,和瀏覽器前端打交道。 PHP 從誕生到現在已經有20多年歷史,從Web時代興起到移動互聯網退潮,互聯網領域各種編程語言和技術層出不窮, Node.js 、 GO 、 Pytho...
摘要:但在密集計算方面比等靜態編譯語言差幾十倍甚至上百倍。一使用棧內存在引擎和擴展中,經常要創建一個的變量,底層就是一個指針。代碼中創建的變量也進行了優化,直接在棧內存上預分配。應用層與底層在錯誤拋出的方式全部統一為異常。 原文:http://rango.swoole.com/archives/440最近PHP官方終于發布了傳說中的PHP7,雖然只是alpha版。PHP7號稱是新一代的PHP...
摘要:握手客戶端向服務端發起連接請求如圖,我們在請求服務器的時候,發送了這樣的。如圖下面解釋下字段的含義協議升級成功服務端處理之后的協議版本號協議升級為至此,握手成功下面就盡情的傳輸數據吧數據傳輸數據傳輸需要客戶端,沒什么好說的了。 一、閱前熱身 什么是keep-alive 1、keep-alive只是客戶端的一種建議 我們打開百度首頁,進一步查看header。 showImg(https:...
閱讀 2829·2023-04-26 01:00
閱讀 757·2021-10-11 10:59
閱讀 2982·2019-08-30 11:18
閱讀 2680·2019-08-29 11:18
閱讀 1022·2019-08-28 18:28
閱讀 3018·2019-08-26 18:36
閱讀 2136·2019-08-23 18:16
閱讀 1070·2019-08-23 15:56