1. 程式人生 > >PHP 使用 swoole 實現即時通訊 demo,以及聊天室實現方式

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