http服务器单进程执行任务
来源:互联网 发布:文泰刻绘软件免费下载 编辑:程序博客网 时间:2024/05/17 06:13
在我们的项目中有这样的需求,就是有些任务需要单进程运行,由于这些进程是比较耗时的,比如其中包含网络请求,而此时网络不好,如果启动多进程会导致服务器资源耗尽,进而导致崩溃。这样主要是为了节约服务器资源。现在很多http服务端的开发都是php,而php调用资源是不断的开启新的进程,这样就面临着服务器崩溃的风险(如果进程有网络请求,并且网络很慢)。这样就需要用一个进程处理这种耗时的处理,主要就是为了防止服务器崩溃。这得需要用php文件锁的方式处理。
先说说处理的思路。首先得用php文件锁,再就是用一个文件记录文件是否文件被锁住(在部分操作系统中 flock() 以进程级实现。当用一个多线程服务器 API(比如 ISAPI)时,可能不可以依靠 flock() 来保护文件,因为运行于同一服务器实例中其它并行线程的 PHP 脚本可以对该文件进行处理),假设0未锁,1上锁
1、当有请求需要处理这个耗时的资源的时候j假设为请求1到来的时候,先检查文件中的内容是否有1(上锁的标志),如果没有即为0,对文件上锁,反正则退出。
2、当请求2获取N来的时候同样执行启动操作。
<?php$lock = 'lock.txt';$fp = fopen($lock, 'r+');if(flock($fp, LOCK_EX)){ if(!fgets($fp, 2)) { rewind($fp) && fwrite($fp, 1); flock($fp, LOCK_UN); fclose($fp); sleep(30);//模拟耗时请求 $fp = fopen($lock, 'r+'); if(flock($fp, LOCK_EX)){ rewind($fp) && fwrite($fp, 0); flock($fp, LOCK_UN); } fclose($fp); }else{ #如果超时则把对应锁文件内容重置 if(filectime($lock)+600 < time()) rewind($fp) && fwrite($fp, 0); flock($fp, LOCK_UN); fclose($fp); }}else{ fclose($fp);}
该程序保证系统中只会出现一个耗时进程,其他的则会退出。
0 0
- http服务器单进程执行任务
- 基于HTTP模拟实现静态服务器-多任务多进程
- 服务器定期执行任务
- crontab 保持单进程执行
- 单进程非阻塞服务器
- 单服务器单进程吞吐量优化总结
- C++十六周任务-单步执行
- mapreduce任务执行的单步跟踪
- 单线程实现定时执行任务功能
- shell单进程执行cmd的函数
- java中服务器启动执行定时任务
- 单进程socket的服务器/客户端模型
- NGINX单进程服务器主处理流程
- 回射服务器【1单进程】
- 单进程多线程并发服务器实现
- window平台单进程多线程服务器通信
- 单进程+多线程+同步 python 服务器 demo
- TCP服务器的单进程实现
- C++中virtual(虚函数)的用法
- 关于局部指针与栈的一点小结
- ARP网关欺骗原理及解决办法
- 移动互联网的架构设计浅谈一
- zoj-3329-One Person Game-有环的概率DP
- http服务器单进程执行任务
- 图片扭曲
- Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法
- QTP总结
- Linux Skype 4.3 下载地址
- [转载]AngularJs学习笔记--directive
- window.dialogArguments
- android递归查找文件
- JAVA窗体中嵌入cmd窗口