swoole 的練習 demo(2)

yyy123456發表於2022-08-31

一直不能下決心好好學習,仔細研究一下,決定用盡量降低難度曲線的方法,從易到難,一步一步的學習,所以整了個demo專案。

git倉庫和使用步驟

git clone https://github.com/lang123789/swoole_demo.git
然後設定了標籤,本文對應 v2.0
cd swoole_demo
git checkout v2.0

有提示錯誤之類,但程式碼已經切換到 v2.0 了。

## 安裝類庫,生成 autoload.php 檔案
composer install
## 啟動 websocket 服務
php src/WebSocket/run.php

需求

2、滿足需求1的前提上,帶上html的js,和服務端的接受websocket的檔案。
3、要求是,任意一個前端頁面上線,則伺服器 shell 列印“有人上線了”。

測試網址

127.0.0.1/index.php

主要程式碼

客戶端主要程式碼

var wsServer = 'ws://{$JS_IP}:9501';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) { console.log("Connected to WebSocket server.");
};

websocket.onclose = function (evt) { console.log("Disconnected");
};

websocket.onmessage = function (evt) { console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) { console.log('Error occured: ' + evt.data);
};

上面的 程式碼中,需放置.env 檔案到專案根目錄,填寫 127.0.0.1
執行到 var websocket = new WebSocket(wsServer); 這句話時,應該就是客戶端和伺服器發起 ws 的連線了。

服務端主要程式碼

public function run()
{
  $this->server = new \swoole_websocket_server(
  $this->config['socket']['host'],
  $this->config['socket']['port']
 );

  $this->server->on('open', [$this, 'open']);
  $this->server->on('message', [$this, 'message']);
  $this->server->on('close', [$this, 'close']);

  $this->server->start();
}

public function open(\swoole_websocket_server $server, \swoole_http_request $request)
{
  echo "有人上線";
}

目錄 config 下的 socket.php 是配置檔案,決定了伺服器在哪個埠啟動 websocket 服務。
以及面向哪些ip開放。
WebSocket 目錄下的 Config.php 是對 config檔案做的封裝,用處不大。
WebSocketServer.php 是核心檔案。

程式碼說明

本文的程式碼功能異常簡單,連上就行,其他都不判斷,不處理。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章