google百度了下,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 都不太精确
缺点:长时间占据内存,经常无缘无故 自己暂停。
<?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();
?>
可以精确到秒, 还是会经常暂停! 别人说他能跑半年 不停。 我是不是开的任务比较多,因为我又8个任务 没30秒 请求一次。
参考workman手册 (https://www.kancloud.cn/walko...)。使用方法很简单 配置好php环境,然后直接命令行执行改文件就行了
php -f 文件所在位置
https://www.workerman.net/workerman-chat
因为需要分析出文本之后广播到每个客户端,那如何在调用socket方法推送给每个客户呢?
参考其他项目中推送消息 (https://www.kancloud.cn/walko...)
如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
关于怎样解决PHP服务器时间不准的问题,得针对不同的情况进行不同的处理。下面是经常遇到的情况,及应对办法。方法一 如果你是管理员,直接去调整服务器的时间,只要服务器时间校正了,就没问题了。如果没法修改服务器时间,又要PHP程序显示的时间正确,那得通过PHP代码来实现。
PHP7中不要做的 10 件事: 不要使用 mysql_ 函数、不要编写垃圾代码、不要在文件末尾使用 PHP 闭合标签、 不要做不必要的引用传递、不要在循环中执行查询、不要在 SQL 查询中使用 *
PHP 一直受到全球 Web开发人员的青睐,它为人们提供了创建高度交互性和直观的网站和Web应用程序的良好方式,包括语言的广度、深度,且执行简单。以下五个原因,我们来说明PHP是世界 Web开发的最佳语言
不管是普通类还是抽象类或是接口,都存放到统一的结构体中,并且在生成中间代码时,会将此类添加到全局类列表中。当然,也是在此时,会通过类名判断该类是否已经存在,如果存在,则添加失败
整理了可以提高php编程效率的20个要点,发博客记录一下,需要的朋友可以参考。还有,用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP源码会在双引号包围的字符串中搜寻变量
在PHP获取客户端IP时,常使用REMOTE_ADDR,但如果客户端是使用代理服务器来访问,那取到的是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用HTTP_X_FORWARDED_FOR
尽量静态化;如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。echo的效率高于print,因为echo没有返回值,print返回一个整型;在循环之前设置循环的最大次数,而非在在循环中;
我们经常弄混的就是日志问题,以及某些级别的日志为何没有记录到日志中。最主要的是要看error_log,display_errors, log_errors这三个配置,只是在看配置的时候,我们还要注意区分php.ini里面的配置是什么,php-fpm.ini里面的配置是什么
apache在启动时php.ini被读取。对于服务器模块版本的php,仅在web服务器启动时读取一次。对于CGI和CLI版本,每次调用都会被读取,Apache Web服务器在启动时会把目录转到根目录
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!