使用php+swoole對client數(shù)據(jù)實時更新(一)
如果想對一個列表做實時的更新,傳統(tǒng)的做法是采用輪詢的方式。以web為例,通過Ajax定時請求服務(wù)端然后獲取數(shù)據(jù)顯示在頁面。這種方式實現(xiàn)簡單,缺點就是浪費資源。
HTTP1.1新增加了對websocket的支持,這樣就可以將被動展示轉(zhuǎn)變?yōu)橹鲃油ㄖ?。也就是通過websocket與服務(wù)端保持持久鏈接,一旦數(shù)據(jù)發(fā)生變化,由server通知client數(shù)據(jù)有更新,然后再進行刷新等操作。這樣就省去了很多不必要的被動請求,節(jié)省了服務(wù)器資源。
要實現(xiàn)一個webscoket的程序,首先需要使用支持html5的瀏覽器
if(ws === null){ var wsServer = 'ws://'+ location.hostname +':8888'; ws = new WebSocket(wsServer); ws.onopen = function(){ console.log("socket連接已打開"); }; ws.onmessage = function(e){ console.log("message:" + e.data); }; ws.onclose = function(){ console.log("socket連接已斷開"); }; ws.onerror = function(e){ console.log("ERROR:" + e.data); }; //離開頁面時關(guān)閉連接 $(window).bind('beforeunload',function(){ ws.close(); } ); }
這樣就實現(xiàn)了一個client,不過事情還遠沒有結(jié)束。上面的代碼只是簡單的進行了連接,對話,關(guān)閉等基本動作。如果想和服務(wù)端進行通訊,必須要有更具體的方案。比如收到message時判斷類型進行進一步操作。
服務(wù)端:此處采用Swoole進行php服務(wù)端的websocket開發(fā),使用swoole進行php的websocket開發(fā)非常簡單,而且它還支持httpserver的支持。
$server = new swoole_websocket_server("0.0.0.0", 8888); $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},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->start();
swoole是一個php的擴展,安裝方式可以參考這里:php安裝swoole擴展的方法
本文先寫到這里,下一篇會寫一些更具體的操作,感興趣的朋友請繼續(xù)關(guān)注本站。謝謝!
相關(guān)文章
PHP論壇實現(xiàn)積分系統(tǒng)的思路代碼詳解
這篇文章主要介紹了PHP論壇實現(xiàn)積分系統(tǒng)的思路,本文通過實例代碼給大家介紹的非常詳細,文中通過代碼給大家補充介紹了thinkphp刪除圖片的方法實現(xiàn)代碼,需要的朋友可以參考下2020-06-06tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法
這篇文章主要介紹了tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法,結(jié)合實例形式簡單分析了mongoDB數(shù)據(jù)庫及thinkPHP5連接、查詢MongoDB數(shù)據(jù)庫的基本操作技巧,需要的朋友可以參考下2018-01-01php workerman定時任務(wù)的實現(xiàn)代碼
這篇文章主要介紹了php workerman定時任務(wù)的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Laravel模型間關(guān)系設(shè)置分表的方法示例
這篇文章主要給大家介紹了關(guān)于Laravel模型間關(guān)系設(shè)置分表的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04CodeIgniter框架數(shù)據(jù)庫事務(wù)處理的設(shè)計缺陷和解決方案
這篇文章主要介紹了CodeIgniter框架數(shù)據(jù)庫事務(wù)處理的設(shè)計缺陷和解決方案,也可以說是一個小BUG,使用CodeIgniter事務(wù)的朋友會遇到這個問題,需要的朋友可以參考下2014-07-07