後臺搭建websocket需要一臺服務器、需要服務器裏配置swoole擴展:
定義:開放端口:9503 ,如果是阿里雲服務器需要在安全裏也開放9503端口;
swoole儘量安裝最新版,這裏我安裝的4.3.3版本,支持的方法會更強勁
swoole文檔:https://wiki.swoole.com/
下面是代碼:
//創建websocket服務器
$server = new \swoole_websocket_server("0.0.0.0", 9503);
//監聽WebSocket連接打開事件
$server->on('open', function ($server, $request) use($output) {
$this->onOpen($server, $request, $output);
});
//監聽WebSocket消息事件
$server->on('message', function ($server, $frame) use($output) {
$this->onMessage($server, $frame, $output);
});
//監聽WebSocket關閉消息事件
$server->on('close', function ($server, $fd) {
$this->onClose($server, $fd);
});
$server->start();
開啓後進行監聽方法的處理:
/**
* 監聽打開webSocket,進行相應處理
* @param $server
* @param $request
* @param $output
*/
private function onOpen($server, $request, $output){
}
/**
* 監聽打開webSocket,獲取當前用戶連接
* @param $server 當前服務
* @param $frame 連接參數、前端發送的消息都會在這裏面
* @param $output
*/
private function onMessage($server, $frame, $output){
$data = json_decode($frame->data,true);//獲取當前前端發送數據
$fd = $frame->fd;//當前客戶端連接的標識;
$server->connections;這個方法是獲取當前所有連接服務器的客戶端;這個是一個二維所以需要循環進行獲取
$server->isEstablished($fd);這個方法是判斷當前這個客戶端是否連接正常,如果連接已經斷開我們需要進行處理;
}
/**
* 監聽關閉webSocket
* @param $server
* @param $request
* @param $redis
*/
public function onClose($server, $fd)
{
//只有客戶端主動斷開連接後,我們才能觸發此方法;我感覺很雞肋,客戶端再次連接就是新的連接標識;所以需要一些方法進行處理
}
如果需要實時的推送一些消息方法;但是我們希望的是一直監聽着是否有推送的:
//循環進行發送消息
$process = new \swoole_process(function($process) use ($server) {
$this->WebSocketRpushList($server);
});
$server->addProcess($process);//添加一個自定義的工作進程
在:$server->start() ;之前需要加入上面4個行代碼;
處理邏輯和發送方法需要根據自己業務需求進行編寫;
代碼處理好後;我們在連接的時候可能在連接的時候不想把端口號寫到前端:
可以用nginx反向代理;
以上就是一些簡單的操作;進行連接了