swoole 定时器 swoole_time_tick 和 swoole_time_after
<?php class myticker
{
public $server = null;
CONST host = '127.0.0.1';
CONST port = 9502;
public function __construct()
{
$this->server = new swoole_websocket_server(myticker::host,myticker::port);
$this->server->on('open',[$this,'onopen']);
$this->server->on('message',[$this,'onmessage']);
$this->server->on('close',[$this,'onclose']); $this->server->start();
}
public function onopen($serv,$request)
{
echo "接通!来自{$request->fd}的问候\n";
if ($request->fd==2)
{
swoole_timer_tick(3000,function($timer_id)
{
//swoole_timer_tick 表示每几秒执行一次操作,第一个参数精确到毫秒
//回调函数中的$timer_id用来标注识别定时器ID,这一定时器id还用于time::clear()清楚定时器
//回调函数中还可使用其他参数,只不过是可选的
echo "3秒后,{$timer_id}开始执行\n";
});
}
} public function onmessage($serv,$frame)
{
echo "接到来自客户句柄----{$frame->fd}的问候,其操作类型为--{$frame->opcode},数据帧的完整状态{$frame->finish}\n";
swoole_timer_after(5000,function() use($serv,$frame){
echo "5秒后,返回客户端{$frame->fd}的数据{$frame->data}\n";
$serv->push("推送到达的时间".date('Y-m-d H:i:s')."\n");
});
$serv->push($frame->fd,$frame->data);
}
public function onclose($serv,$fd)
{
echo "关闭来自{$fd}的连接\n";
}
}
$cpc=new myticker();
?>
swoole 定时器 swoole_time_tick 和 swoole_time_after的更多相关文章
- 关于swoole 定时器有时候无法清除的解决方法
关于swoole 定时器有时候无法清除的解决方法 有时候start里面写个定时器 有时候你关闭进程的时候 发现定时器还是可以进行 目前只有重启服务器才可以 清除 还有就是ps -ef | grep p ...
- swoole 定时器
timer.php <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); swoole_timer_tick(, function ($timer ...
- PHP框架Swoole的一个定时器Timer特性
在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计.通知等操作. 比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行.到期情况.整个项目的进度等等,根据统计情况,做相 ...
- Swoole server函数列表(转载)
swoole_server::__construct swoole_server::set swoole_server::on swoole_server::addlistener swoole_se ...
- php Swoole实现毫秒级定时任务
项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole ...
- Swoole实现毫秒级定时任务
项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole ...
- RabbitMQ 入门教程(PHP版) 延迟队列,延迟任务
延迟任务应用场景 场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时. 场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单. 场景三:过1分钟给新 ...
- <记录> PHP监控进程状态,完成掉线自动重启
1. 利用Shell脚本实现 #!/bin/bash PORT= while [ true ];do read -p "please enter the port that you want ...
- PHP之高性能I/O框架:Libevent(三)
Swoole Swoole里也提供了一些直接操作底层epoll/kqueue事件循环的接口,可将其他扩展创建的socket.PHP代码中stream/socket扩展创建的socket等加入到Swoo ...
随机推荐
- [bzoj3193][JLOI2013]地形生成_排列组合_贪心
[JLOI2013]地形生成 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3193 题解: 这种求总排列的题,一种常规做法就是所有的元素 ...
- strCmd.Format("delete FROM userTable where name = '%s'", name);
string.Format("select * from 数据库表 where 用户名='%s' and 密码='%s' ",m_1,m_2); 把[m_1]和[m_2]的值按照[ ...
- PAT A1006 Sign In and Sign Out (25)
AC代码 #include <cstdio> #include <algorithm> #include <iostream> using namespace st ...
- 线性基求交(2019牛客国庆集训派对day4)
题意:https://ac.nowcoder.com/acm/contest/1109/C 问你有几个x满足A,B集合都能XOR出x. 思路: 就是线性基求交后,有几个基就是2^几次方. #defin ...
- php 连接sqlserver
本地环境windows 10+phpstudy2016+ SQL Server 2008 R2 x86+php7.0查看自己sql server 多少位可以在新建查询里输入 select @@VERS ...
- 交替方向乘子法(ADMM)的原理和流程的白话总结
交替方向乘子法(ADMM)的原理和流程的白话总结 2018年08月27日 14:26:42 qauchangqingwei 阅读数 19925更多 分类专栏: 图像处理 作者:大大大的v链接:ht ...
- 进阶Java编程(3)线程的同步与死锁
线程的同步与死锁 1,同步问题引出 在多线程的处理之中,可以利用Runnable描述多个线程操作的资源,而Thread描述每一个线程对象,对于当多个线程访问统一资源的时候如果处理不当就会产生数据的错误 ...
- java——HashSet中add()方法不能加重复值得原因理解(我们一起来看底层代码吧)
Set<String> names = new HashSet<>(); names.add("张三"); names.add(new String(&qu ...
- react绑定事件的几种写法
方法一:最麻烦的写法,不推荐 import React from 'react'; class App extends React.Component { handleClick() { alert( ...
- extjs CheckboxGroup
// 复选框 var fxkGroup = new Ext.form.CheckboxGroup({ id : 'fxkGroup', xtype : 'checkboxgroup', name : ...