想其實現不外乎以下幾步
1.使用者傳送彈幕到伺服器
2.伺服器接收到訊息將訊息儲存
3.客戶端和伺服器通訊拿到彈幕資料
4.將彈幕資料在頁面顯示
那麼重點來了。就是第3步客戶端和伺服器的通訊方式
開始博主如果用ajax輪循來實現可以嗎,可以(但會比較複雜,ajax請求為無狀態協議),而且輪循有間隔會有資訊不及時的問題。
還有就是只能應該小資料。無法滿足大資料的要求
所以博主就選擇了socket通訊來實現
研究了一下php的swoole擴充套件(博主是phper)發現其功能相當強大
來自swoole官網的一段話:
swoole內建了http/websocket伺服器端/客戶端、http2.0伺服器端。
除了非同步io的支援之外,swoole為php多程序的模式設計了多個併發資料結構和ipc通訊機制,可以大大簡化多程序併發程式設計的工作。其中包括了併發原子計數器,併發hashtable,channel,lock,程序間通訊ipc等豐富的功能特性。
博主也想自已實現一下這個功能用來學習socket通訊
swoole擴充套件如何安裝
請參考官網這裡不再詳述
好了,到正題了 博主以socket寫了一簡單的彈幕demo
先上:無彈幕
彈幕來啦:
效果如上,
php服務端 swoole_server.php
執行方法 : php swoole_server.php
如果出錯請檢查 php.ini裡是否加入了extension=swoole.so 由於是用php 的 cli 所以要找到cli使用的php.ini檔案 修改
檢視php.ini位置
php -i |grep php.ini
在php.ini中加入extension=swoole.so
** swoole_server.php
<?php
//建立websocket伺服器物件,監聽0.0.0.0:9502埠
$ws = new swoole_websocket_server("0.0.0.0",9502);
//監聽websocket連線開啟事件
$ws->on('open', function ($ws, $request) ');
});//監聽websocket訊息事件
$ws->on('message', function ($ws, $frame) \n";
echo "";
print_r($frame);
//遍歷所有連線,將接到的訊息廣播出去
foreach($ws->connections as $fd)");
}//$ws->push($frame->fd, "");
});//監聽websocket連線關閉事件
$ws->on('close', function ($ws, $fd) is closed\n";
});$ws->start();
?>
前端**: danmu.html
發一彈
PHP開發客服系統之WebSocket
前面的章節我們大致了解了一下開發客服的系統的思路和gatewayworker,這一小節我們來看一下如何通過websocket連線到gatewayworker。websocket的監聽事件 socket.onopen 連線建立時觸發 socket.onmessage 客戶端接收服務端資料時觸發 soc...
C 完成WebSocket 服務
相信大家對websocket 有所了解,這裡就不對websocket 進行介紹了 直接上菜!net core 或 net 5.0 本人用的是 net 5.0的開發環境,引用下面兩個包 本人新建的是窗體控制項,窗體 如下 using system using system.collections.ge...
php使用websocket示例詳解
url 下面我畫了乙個圖演示 client 和 server 之間建立 websocket 連線時握手部分,這個部分在 node 中可以十分輕鬆的完成,因為 node 提供的 net 模組已經對 socket 套接字做了封裝處理,開發者使用的時候只需要考慮資料的互動而不用處理連線的建立。而 php ...