php之websocket服務使用(彈幕實現)

2021-07-27 16:33:11 字數 1718 閱讀 8929

想其實現不外乎以下幾步

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 ...