1. 程式人生 > >WorkerMan 入門學習之(三)基礎教程-Timer類的使用

WorkerMan 入門學習之(三)基礎教程-Timer類的使用

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類的使用