php 定時任務

google百度了下,PHP任務大致上能夠分爲三類php

最近須要去定時請求數據,而後分析以後 指定相應的文本 經過socket廣播給用戶。 程序員

具體的分析 制定文本的業務 不復雜。 使用curl 請求數據 。可是對於定時任務這一塊怎麼使用都不行。數據庫

一、服務器計劃任務

WIN服務器能夠直接使用定時任務執行相關的應用程序,LINUX服務器則能夠經過在/etc/crontab裏添加定時任務來實現。瀏覽器

php -f  文件所在位置

缺點:最低一分鐘的任務計劃。 不少請求須要一分鐘之內。 須要儲存上一次的數據,下次再去取。服務器

二、經過死循環實現任務自動執行

創建一個程序文件頁面,經過ignore_user_abort來設置關閉瀏覽器頁面後仍可執行,那麼,在運行該程序頁面後,您所須要的任務計劃便會一直自動執行。對於通常的PHP程序員來講,若是沒有足夠的把握,這種操做是不被容許的,由於死循環極容易使用服務器當機。併發

set_time_limit(0);   // 取消超時
        // ignore_user_abort(true);  //  瀏覽器關閉 繼續執行 
        while (true) {
            dongsomthing();
            sleep( 120); // 定時 120秒   usleep()  毫秒  1000毫秒=1秒
        }
        die;

sleep 和 usleep 都不太精確 框架

缺點:長時間佔據內存,常常平白無故 本身暫停。curl

三、經過workman等第三方框架。

···socket

<?php
    use \Workerman\Worker;
    use \Workerman\Lib\Timer;
    require_once __DIR__ . './Workerman/Autoloader.php';

$task = new Worker();
// 開啓多少個進程運行定時任務,注意多進程併發問題
$task->count = 1;
$task->onWorkerStart = function($task)
{
    // 每2.5秒執行一次 支持小數,能夠精確到0.001,即精確到毫秒級別
    $time_interval = 30;
    Timer::add($time_interval, function()
    {
           dosomthing() 
          echo "task run\n";
    });
};

// 運行worker
Worker::runAll();
    
?>

···ui

能夠精確到秒, 仍是會常常暫停! 別人說他能跑半年 不停。 我是否是開的任務比較多,由於我又8個任務 沒30秒 請求一次。
參考workman手冊 (https://www.kancloud.cn/walko...
使用方法很簡單 配置好php環境,而後直接命令行執行改文件就好了

php  -f 文件所在位置

四、使用GatewayWorker搭建socket 服務端

https://www.workerman.net/workerman-chat

由於須要分析出文本以後廣播到每一個客戶端,那如何在調用socket方法推送給每一個客戶呢?
參考其餘項目中推送消息 (https://www.kancloud.cn/walko...

那如何存入數據庫呢?
參考https://www.kancloud.cn/walko...

參考(https://www.kancloud.cn/walko...

相關文章
相關標籤/搜索