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类的使用的更多相关文章

  1. 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

    salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)   salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...

  2. Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)

    原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  3. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  4. Qt快速入门学习笔记(基础篇)

    本文基于Qter开源社区论坛版主yafeilinux编写的<Qt快速入门系列教程目录>,网址:http://bbs.qter.org/forum.php?mod=viewthread&am ...

  5. 【数据库】3.0 MySQL入门学习(三)——Windows系统环境下MySQL安装

    1.0 我的操作系统是window10 专业版 64位.,不过至少windows7以上系统都是一样的. 关于MySQL如何下载,请参考博文: [数据库]2.0 如何获得MySQL以及MySQL安装 h ...

  6. OpenGL入门学习(三)

    http://developer.178.com/201103/94954704639.html 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点 ...

  7. WorkerMan 入门学习之(二)基础教程-Connection类的使用

    一.TcpConnection类 的使用 1.简单的TCP测试 Server.php <?php require_once __DIR__.'/Workerman/Autoloader.php' ...

  8. python入门到精通[三]:基础学习(2)

    摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...

  9. salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

    salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesforce中的数据库使用的是Force.com 平台的数据库,数据表一行数据可以理解成一个sObject变量 ...

随机推荐

  1. WIN10快捷键

    WIN10快捷键 多桌面切换:WIN + CTRL +  ←/→ 桌面横竖屏转向:ALT + CTRL +  ←/→

  2. mysql 备份数据库 mysqldump

    @echo off for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE ...

  3. js數字

    js數字只有一種類型:不是類型語言. js的數字可以使用科學計數法或者不使用科學計數法: js都是64位的, 如果是整數,(不使用科學計數法或者是小數點)最大15位的: 如果是浮點數,最大17位的,浮 ...

  4. Django model 表与表的关系

    一对多:models.ForeignKey(其他表) 多对多:models.ManyToManyField(其他表) 一对一:models.OneToOneField(其他表) 应用场景: 一对多:当 ...

  5. BZOJ[Usaco2017 Jan]Promotion Counting——线段树合并

    题目描述 The cows have once again tried to form a startup company, failing to remember from past experie ...

  6. SpringBoot基础入门

    1.SpringBoot核心相关内容 1.1入口类 SpringBoot通常有一个入口类*Application,内部有一个main方法,是启动SpringBoot的入口.使用@SpringBootA ...

  7. Java 8 forEach简单例子(转载)

    forEach and Map 1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.put( ...

  8. day28 classmethod 装饰器

    类方法装饰类方法 把一个方法变成类中的方法 之后调用此方法不需要对类实例化后在调用 直接通过类.方法即可调用 class Goods: __discount = 0.5 def __init__(se ...

  9. java 按概率产生

    import java.util.Random; import org.junit.Test; public class Demo1 { public void getChance(int perce ...

  10. 【BZOJ2875】【NOI2012】随机数生成器(矩阵快速幂)

    [BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...