WorkerMan 入门学习之(三)基础教程-Timer类的使用
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类的使用的更多相关文章
- 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL) salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...
- Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)
原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- Qt快速入门学习笔记(基础篇)
本文基于Qter开源社区论坛版主yafeilinux编写的<Qt快速入门系列教程目录>,网址:http://bbs.qter.org/forum.php?mod=viewthread&am ...
- 【数据库】3.0 MySQL入门学习(三)——Windows系统环境下MySQL安装
1.0 我的操作系统是window10 专业版 64位.,不过至少windows7以上系统都是一样的. 关于MySQL如何下载,请参考博文: [数据库]2.0 如何获得MySQL以及MySQL安装 h ...
- OpenGL入门学习(三)
http://developer.178.com/201103/94954704639.html 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点 ...
- WorkerMan 入门学习之(二)基础教程-Connection类的使用
一.TcpConnection类 的使用 1.简单的TCP测试 Server.php <?php require_once __DIR__.'/Workerman/Autoloader.php' ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesforce中的数据库使用的是Force.com 平台的数据库,数据表一行数据可以理解成一个sObject变量 ...
随机推荐
- MYSQL ROW_FORMAT=Compact
https://dev.mysql.com/doc/refman/5.6/en/innodb-row-format-antelope.html https://docs.oracle.com/cd/E ...
- JQuery 操作 radio 被坑一例
.removeAttr('checked'); .prop('checked',false); .prop('checked',true); 与 .attr("checked",t ...
- OSI的七层模型介绍
应用层: 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层: 数据格式化,代码转换,数据加密 没有协议. (信息的语法语义以及它们的 ...
- [转载]以及部分总结--Linux下创建单机ASM存储的Oracle实例的过程---感谢方总
Linux下单机安装ASM流程总结 一.安装Linux ESXi上传iso镜像至存储目录 创建虚拟机,并且选择主机设备的ISO启动 选择完成时编辑虚拟机设置 配置镜像文件如下: 打开控制台: 并且选择 ...
- python3_字符串
一.字符串的表示 >>> s = "narjaja never give up" #字符串的创建和初始化 >>> s = 'narjaja ne ...
- hdu 4685(强连通分量+二分图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685 题意:n个王子和m个公主,王子只能和他喜欢的公主结婚,公主可以和所有的王子结婚,输出所有王子可能 ...
- pandas 级联 concat append
连接的一个有用的快捷方式是在Series和DataFrame实例的append方法.这些方法实际上早于concat()方法. 它们沿axis=0连接 #encoding:utf8 import pan ...
- Lodop多分出空白页的可能(情况1)
在用Lodop进行打印超文本的时候,本身内容看上去只有一页,却分页分出空白的一页,很有可能有不可见内容的存在,下面是测试的一种情况,如html内部有内容占着空间,却是不可见的,如一些对象,或者如测试内 ...
- AXI4
axis AXI4-stream 去掉了地址项,允许无限制的数据突发传输规模: 摘自http://xilinx.eetrend.com/blog/11443
- Lucene 分析的意思是按照某种规则进行内容拆分 支持模糊搜索
Lucene 分析的意思是按照某种规则进行内容拆分 里面的域的值是拆分后的内容