眾所周知,PHP用于開發(fā)基于HTTP協(xié)議的網(wǎng)站應用非常便捷。而HTTP協(xié)議是一種單向的通信協(xié)議,只能接收客戶端的請求,然后響應請求,不能主動向客戶端推送信息。因此,一些實時性要求比較高的應用,如實時聊天、直播應用、在線網(wǎng)頁游戲等,就不適合采用HTTP協(xié)議。即使采用客戶端主動輪詢的方式來間接實現(xiàn)雙向通信,也會較大地增加服務器的負擔,增大代碼的復雜性,不利于維護。
雙向通信
那么,是否PHP就無法用來開發(fā)雙向通信的應用呢?
答案是否定的。PHP內(nèi)置socket通信支持,可以與linux程序基于socket進行雙向通信。php swoole框架封裝了一個websocket服務端,基于此可以很方便地建立一個與html5的websocket客戶端進行通信的服務。
swoole
Swoole是一個面向生產(chǎn)環(huán)境的 PHP 異步網(wǎng)絡通信引擎,使 PHP 開發(fā)人員可以編寫高性能的異步并發(fā) TCP、UDP、Unix Socket、HTTP,WebSocket 服務。Swoole 可以廣泛應用于互聯(lián)網(wǎng)、移動通信、企業(yè)軟件、云計算、網(wǎng)絡游戲、物聯(lián)網(wǎng)(IOT)、車聯(lián)網(wǎng)、智能家居等領域。 使用 PHP + Swoole 作為網(wǎng)絡通信框架,可以使企業(yè) IT 研發(fā)團隊的效率大大提升。
swoole支持用于搭建多種server,包括http server、websocket server、tcp server、redis server等等。這里我們使用到的是其中的websocket server。
WebSocket
WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。WebSocket通信協(xié)議于2011年被IETF定為標準RFC 6455,并由RFC7936補充規(guī)范。WebSocket API也被W3C定為標準。
WebSocket使得客戶端和服務器之間的數(shù)據(jù)交換變得更加簡單,允許服務端主動向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。
簡單地來說,websocket協(xié)議實現(xiàn)了瀏覽器和服務器之間的雙向通信。而html5原生支持websocket協(xié)議。
1.安裝swoole
swoole以php擴展的形式進行加載,首先需要為你的php安裝swoole擴展,安裝命令如下:
pecl install swoole
安裝成功后在php.ini文件加上extension=swoole.so加載擴展
2.啟動服務端
新建一個php文件,文件名為server.php,文件內(nèi)容如下:
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501); $server->on('open', function (Swoole\WebSocket\Server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; }); $server->on('message', function (Swoole\WebSocket\Server $server, $frame) { echo "receive from {$frame->fd}:{$frame->data}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) { global $server;//調(diào)用外部的server // $server->connections 遍歷所有websocket連接用戶的fd,給所有用戶推送 foreach ($server->connections as $fd) { // 需要先判斷是否是正確的websocket連接,否則有可能會push失敗 if ($server->isEstablished($fd)) { $server->push($fd, $request->get['message']); } } }); $server->start();
此服務監(jiān)聽本機的9501端口,運行命令 php server.php 啟動服務。
1.客戶端代碼
新建一個testServer.html文件,寫入以下內(nèi)容:
<!doctype html> <html> <head> <title>測試WebSocket</title> </head> <body> <script> var ws = new WebSocket("ws://【服務端IP】:9501"); ws.onopen = function(event){ console.log("connected!"); ws.send("hello server,this is client!"); }; ws.onmessage= function(event){ console.log("server message:"+event.data); } ws.onclose = function(event){ console.log("closed!"); }; </script> </body> </html>
將【服務端IP】替換成swoole服務端ip,保存文件。
(1) 訪問步驟四的客戶端demo頁面,首先與服務端建立連接,查看瀏覽器console log,可以看到顯示:
connected!
(2) 查看linux控制臺,可以看到顯示:
server: handshake success with fd1
(3) 接著客戶端向服務端發(fā)了一條消息,服務端控制臺顯示:
receive from fd1:hello server,this is client!
(4) 服務端收到消息后,向客戶端回復了一條消息,客戶端控制臺顯示:
server message:this is server
以上就是基于swoole+websocket開發(fā)雙向通信應用的簡單演示,在線聊天、網(wǎng)頁游戲等實時通信的應用也可基于此方式進行開發(fā)。php開發(fā)效率高,可以更快、更高效地進行此類應用地開發(fā),節(jié)約開發(fā)成本。
大家如果還有什么疑問,可以關注公眾號“全棧社區(qū)”進行提問。
隨著市場對前端開發(fā)技術的使用越來越廣泛,技術要求越來越高,這也使得對前端開發(fā)人才的需求量越來越多,要求也越來越高。盡管如今學習前端開發(fā)的人趨之若鶩,不過零基礎學習前端開發(fā),這三個問題必須了解清楚。
①初級階段:
html:常見標簽,html5新增的,語義化標簽等等
css:選擇器,背景,文本,鏈接,列表,盒模型,定位,浮動,css3新增的屬性
bootstrap:柵格化系統(tǒng),按鈕,表單,導航....
javascript: 數(shù)據(jù)類型,對象,函數(shù),運算符,語句,DOM,選擇器,操作,事件...
jQuery: 選擇器,dom,鏈式調(diào)用,事件,動畫
②進階階段:
入門:js的面向?qū)ο缶幊蹋?zepto,移動端,響應式,css3d,bootstrap組件,jqueryUI
高級數(shù)據(jù):面向?qū)ο筮M階,ajax,json,(后端語言:php)
新興的技術:html5: socket, 多媒體,canvas,圖像處理,web works,數(shù)據(jù)存儲,跨域。
技術拓展:地圖開發(fā),微信開發(fā),大數(shù)據(jù)可視化...
后端服務:nodejs:文件系統(tǒng),路由,mongodb, express....
?、鄹呒夒A段:
架構基礎:設計模式,MVC, MVVM
模塊化開發(fā):amd,cmd, commonjs,systemjs
css預編譯:less, sass,stylus
前沿規(guī)范:ES5, ES6, ES2016, ES2017, typescript
新型框架:backbone, vue, vuex, angular, react, redux, reflux, flux, angular5等等。
pc端:基礎技術,一些框架
移動端:基礎,移動端框架
nodejs服務器端:了解服務器,以及node的框架
游戲端:html5游戲,cavnas
大數(shù)據(jù)可視化:highcharts等等
前端架構:設計模式,架構,開發(fā)工程化工具,通用組件,通用插件
全棧工程師,會前端也會后端,
其他語言可能是偽全棧(只能寫后臺管理系統(tǒng))
混合開發(fā):react native
在工作中,我們都是在寫項目,所以學習我們不能僅僅學習某個點,更重要的是多寫項目。我們需要在培訓學習的過程中實戰(zhàn)各個領域的項目,了解更多的技術。
如果你對前端開發(fā)學習感興趣想要免費教程可私信,還可閱讀:學習web前端需要掌握哪些技術?學web前端開發(fā)需要多久? - 千鋒教育
下HTMl5培訓越來越激烈,許多的培訓機構更是打出了各種誘人的廣告,也正是因為這些廣告無疑增加了我們的選擇難度。我們該如何選擇HTML5培訓班呢?且看華清遠見如何為初學者支招
首先了解HTML5培訓是什么?
培訓HTML5不僅是簡單的學習HTML5的知識,在學習的過程中我們會涉及到,CSS、前端、js的知識的,所以HTMl5也可以稱之為前端培訓。對于網(wǎng)站來講可以分為前端和后端,前端的應用和網(wǎng)頁直接展示給客戶而后端的只是為前臺服務的。由此可知,前端的重要性不言而喻。目前微信、淘寶、一些游戲等等都是通過前端開發(fā)來做的,這其中UI在整個前端工作中所占比重為10%,js所占比重為30%左右,剩余的大部分工作都是通過HTML5開發(fā)來完成的。目前HTML5培訓主要集中在培訓學員HTML5相關技能方面。
其次,了解HTML5培訓主要學習什么?
第一階段:web頁面制作基礎;精通掌握HTML5應用,掌握CSS在開發(fā)中的應用,學會頁面標準化布局。
第二階段:能獨立設計具有創(chuàng)意、能夠獨立設計出手機移動網(wǎng)站、掌握標準化布局中的各項技術、符合需求的web界面,掌握頁面設計和原型圖制作。
第三階段:掌握js的基本抄作流程與基本語法,結合HTML實現(xiàn)代表性的在制作出js特效制作,可以獨立完成第三方特效插件和網(wǎng)頁中常見特效的使用。
第四階段:后端開發(fā)技術,了解 PHP 語法,掌握 Socket 長連接實時網(wǎng)絡通信技術,掌握 NoSQL中的MongoDB 的應用,掌握http與web工作原理,解 MySQL 數(shù)據(jù)庫的基本操作。
第五階段:移動互聯(lián)網(wǎng)應用,掌握 HTML5 新增智能表單的使用,制作播放器對搜索引擎優(yōu)化進行講解,掌握優(yōu)化的各種方式,掌握響應式頁面布局技術,掌握微網(wǎng)站的開發(fā)過程及開發(fā)移動端web應用。
第六階段:特效開發(fā)高級實戰(zhàn),利用jQuery框架進行js特效開發(fā),掌握 AngularJS 框架應用、掌握 Bootstrap 的使用,掌握 jQuery Mobile 的應用開發(fā)移動應用程序。
第七階段:企業(yè)級應用開發(fā),使用 web 制作 LBS 應用程序;在應用中使用多線程技術完成 UI 交互與數(shù)據(jù)處理并行,了解和掌握 PhoneGap 的安裝和操作,能夠使用 PhoneGap 進行封裝,實現(xiàn)跨平臺的應用,了解和掌握觸屏和手勢相關的事件使用方式,能夠通過媒體查詢和多列布局屬性實現(xiàn)屏幕自適應,實現(xiàn)響應式布局了解和掌握不同的設計模式以及其適合的企業(yè)APP,并且能夠?qū)⑵鋺迷诔绦蛟O計中。
最后,怎樣選擇HTML5培訓機構?
第一,初學者在選擇的時候不能只看誰家的廣告做的多、口號響亮,而是要看能不到真正學到技術,得到鍛煉;
第二,選擇的時候不能只聽別人的評價,一定要去做實地考察,培訓班允許的情況下去試聽相應的課程;在試聽課程的過程中感受課程設置是否符合自身的成長;
第三,對于相應的就業(yè)服務一定要搞清楚,確定是否推薦就業(yè)、是否保障最低薪資等等。
華清遠見初學者在選擇HTML5培訓機構時,一定要慎重對自己的未來負責。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。