php定时任务swoole,2018年swoole实战3-异步毫秒定时器

项目中需要使用定时器时,crontab是常用的选择,不过crontab的粒度太大,最小时间单位是分钟级别,如果我们要设置秒级,甚至毫秒级的定时器,crontab就爱莫能助了,而且crontab是在服务器设置,脱离了业务代码,增加了维护成本。

swoole内置了 异步毫秒定时器,一看这名称就觉得酷炫狂霸拽

老规矩,继续用大刘的《三体》作为场景模拟:

服务端

新建 server.php

class WebSocket {

const HOST = '0.0.0.0';

const PORT = 8812;

public $ws = null;

public function __construct()

{

$this->ws = new swoole_websocket_server(self::HOST, self::PORT);

$this->ws->set(

[

'worker_num' => 2,

]

);

$this->ws->on('open', [$this, 'onOpen']);

$this->ws->on('message', [$this, 'onMessage']);

$this->ws->on('close', [$this, 'onClose']);

$this->ws->start();

}

/**

* 监听连接事件

* @param $ws

* @param $request

*/

public function onOpen($ws, $request) {

}

/**

* 监听数据发送事件

* @param $ws

* @param $frame

*/

public function onMessage($ws, $frame) {

$timer = swoole_timer_tick(1000, function() use ($ws, $frame){

$time = date("H:i:s");

$message = "水滴穿过人类星际飞船,犹如石头穿过水中一样,一连串的飞船都报废了... {$time}";

$ws->push($frame->fd, $message);

});

swoole_timer_after(5000, function() use($ws, $frame, $timer) {

$ws->push($frame->fd, "攻击结束,除了蓝色空间和青铜时代两艘飞船逃逸之外,其他都挂了,地球文明快完蛋了" . date('H:i:s'));

swoole_timer_clear($timer);

});

$ws->push($frame->fd, "水滴已经被人类捕获,开始启动攻击指令,他们还以为是我们送来的表示和平的礼物,甚至称其为圣母的眼泪,哈哈哈...");

}

public function onClose($ws, $fd) {

}

}

$obj = new WebSocket();

716892125146

代码解析

客户端

新建 client.html

webSocket客户端

let wsUrl = "ws://127.0.0.1:8812"

let webSocket = new WebSocket(wsUrl) // 建立请求连接

webSocket.onopen = function(evt) {

let message = "与三体世界建立连接"

webSocket.send(message); // 发送数据到服务端

}

webSocket.onmessage = function(evt) { // 接收服务端数据

let message = String(evt.data)

console.log(message)

}

webSocket.onclose = function(evt) {

console.log("地球与三体的连接已中断")

}

webSocket.onerror = function(evt, e) {

let message = String(evt.data)

console.log("连接出错:" + message)

}

启动服务

☁ ws php server.php

[2018-07-27 14:10:03 @62813.0] TRACE Create swoole_server host=0.0.0.0, port=8812, mode=3, type=1

716892125146

定时器

如果觉得本文对你有所帮助,点个赞,或者赏杯咖啡钱,你的认可对我很重要

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值