PHP 使用 swoole 實現即時通訊 demo,以及聊天室實現方式
服務端程式碼
ini_set('display_errors', 1); error_reporting(E_ALL);
$ws = new swoole_websocket_server("0.0.0.0", 8080);
//監聽WebSocket連線開啟事件 客戶端 onopen 觸發此事件 $ws->on('open', function ($ws, $request) { var_dump($request->fd, $request->get, $request->server); $ws->push($request->fd, "hello, welcome\n"); });
//監聽WebSocket訊息事件 客戶端 send() 方法觸發此事件 $ws->on('message', function ($ws, $frame) { echo "Message: {$frame->data}\n"; $ws->push($frame->fd, "server: {$frame->data}");//以 fd 為標識發給客戶端 觸發客戶端 onmessage 事件 });
//監聽WebSocket連線關閉事件 $ws->on('close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; });
$ws->start();
客戶端程式碼
<input id='msg'> <h1 onclick='send()'>傳送</h1>
<script>
var wsServer = 'ws://47.106.184.48:8080'; var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {//連結成功事件 console.log("Connected to WebSocket server.",'evt:'+evt); };
websocket.onclose = function (evt) {//關閉連結事件 console.log("Disconnected",'evt:'+evt); };
websocket.onmessage = function (evt) {//接收訊息事件 服務端 push事件 觸發此事件 console.log('Retrieved data from server: ' + evt.data); };
websocket.onerror = function (evt, e) {//發生錯誤後的事件 console.log('Error occured: ' + evt.data); }; console.log(websocket); function send(){ let v = document.getElementById('msg').value;
websocket.send(v);//觸發 服務端 message 事件
}
</script>
安裝 swoole 擴充套件後
php youServerFile.php
聊天室功能,則是以 fd 群發訊息就 ok