WorkerMan 入門學習之(三)基礎教程-Timer類的使用
阿新 • • 發佈:2017-08-24
timer類 定時 基礎教程 連接 worker loader 入門 入門學習 json
1、ServerTimer.php 代碼:
<?php
/**
* 定時器學習
*/
require_once __DIR__ . ‘/Workerman/Autoloader.php‘;
use Workerman\Worker;
use Workerman\Lib\Timer;
// 創建一個容器
$worker = new Worker(‘websocket://0.0.0.0:12345‘);
// 連接回調
$worker->onConnect = function ($connection) {
// 每10s 檢查客戶端是否有name屬性
Timer::add(10, function () use ($connection) {
if (!isset($connection->name)) {
$connection->close("auth timeout and close");
}
}, null, false);
};
$worker->onMessage = function ($connection, $data) {
if (!isset($connection->name)) {
$data = json_decode($data,true);
if (!isset($data[‘name‘]) || !isset($data[‘password‘])) {
return $connection->close("auth fail and close");
}
// 如果客戶端name存在,mysql,這裏使用動態給對象賦值屬性name,標記該對象已經通過驗證
$connection->name = $data[‘name‘];
// 廣播給所有用戶,該用戶加入
return broadcast($connection->name . " join \n");
}
// 簡單的連接器
return broadcast($connection->name . ‘ said : ‘ . $data);
};
function broadcast($msg)
{
// 引入$worker 對象
global $worker;
// $worker->connections 為客戶端連接的所有對象
foreach ($worker->connections as $connection) {
if (!isset($connection->name)) {
//忽略掉
continue;
}
$connection->send($msg);
}
}
$worker::runAll();/
2、開啟服務
3、打開谷歌瀏覽器測試
(1)沒有攜帶name和password
(2)攜帶name和password
(3)兩個客戶端互相通信
客戶端001
客戶端002
WorkerMan 入門學習之(三)基礎教程-Timer類的使用