歡迎閱讀.
起步
先安裝swoole擴充套件,這個沒啥好說的
composer require swooletw/laravel-swoole
,安裝包
php artisan vendor:publish --tag=laravel-swoole
釋出資源
.env 檔案後面加上
SWOOLE_HTTP_WEBSOCKET=true # 開啟websocket服務
第二步,開啟服務
php artisan swoole:http start
開啟服務
routes/websocket.php 檔案
Websocket::on('connect', function ($websocket, Request $request) {
// called while socket on connect
$websocket->emit('我是伺服器這邊連結成功的訊息.', [123]);
});
Websocket::on('disconnect', function ($websocket) {
// called while socket on disconnect
$websocket->emit('你已經斷開連結.', [123]);
});
Websocket::on('example', function ($websocket, $data) {
$websocket->broadcast()->emit('example', 'this is a test');
});
前端Js檔案
index.html新增程式碼,這個是vue中拷出來的程式碼,相信轉換成普通的js對於大家來說還是沒問題的。
<script>
data() {
return {
path: "ws://127.0.0.1:1215", // 和上面開啟的連結是一樣的,只是換了ws協議
socket: ""
};
},
if (typeof WebSocket === "undefined") {
alert("您的瀏覽器不支援socket");
} else {
// 例項化socket
this.socket = new WebSocket(this.path);
// 監聽socket連線
this.socket.onopen = this.open;
// 監聽socket錯誤資訊
this.socket.onerror = this.error;
// 監聽socket訊息
this.socket.onmessage = this.getMessage;
}
open: function() {
console.log("socket連線成功");
this.send('["example",[1]]'); // 發個訊息 格式預設規定是這樣的
},
error: function() {
console.log("連線錯誤");
},
getMessage: function(msg) {
console.log("收到伺服器資訊" + msg.data);
}
send: function(params) {
this.socket.send(params);
},
</script>
效果
客戶端1:
客戶端2:
結語
至於有人想問,如果伺服器推送資訊怎麼弄,這個我的思路是用伺服器模擬一個客戶端傳送,然後在swoole進行廣播。
模擬websocket客服端傳送的話:textalk/websocket 包可以幫到你。
至於如果想實現一個簡單的IM功能的話,可以看看文件【文件地址】,都有很多基本的方法提供,我想實現起來應該不難。有興趣的話大家可以做一下。
本作品採用《CC 協議》,轉載必須註明作者和本文連結