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