php开发用swoole作为webserver服务时,每次代码更新需重新启动服务,可以利用下面代码解决:
//1.在onWorkerStart中启动一个协程来检查
t
h
i
s
−
>
h
t
t
p
−
>
o
n
(
′
w
o
r
k
e
r
S
t
a
r
t
′
,
a
r
r
a
y
(
this->http->on('workerStart', array(
this−>http−>on(′workerStart′,array(this, ‘onWorkerStart’));
go(array($this, ‘phpReloadWorker’));
//2.定期5秒检测已加载文件的变更,如果发现文件修改时间变化就重启服务
function phpReloadWorker(){
$file2TimeMap=array();
while(1){
f
i
l
e
s
=
g
e
t
i
n
c
l
u
d
e
d
f
i
l
e
s
(
)
;
/
/
只
监
控
状
态
的
文
件
f
o
r
e
a
c
h
(
files=get_included_files();//只监控状态的文件 foreach(
files=getincludedfiles();//只监控状态的文件foreach(files as $file){
t
i
m
e
=
@
f
i
l
e
m
t
i
m
e
(
time=@filemtime(
time=@filemtime(file);
if(!isset(
f
i
l
e
2
T
i
m
e
M
a
p
[
file2TimeMap[
file2TimeMap[file])){
f
i
l
e
2
T
i
m
e
M
a
p
[
file2TimeMap[
file2TimeMap[file]=KaTeX parse error: Expected 'EOF', got '}' at position 12: time; }̲else if(file2TimeMap[
f
i
l
e
]
!
=
file]!=
file]!=time){
$this->http->reload(); //这句是重点
f
i
l
e
2
T
i
m
e
M
a
p
[
file2TimeMap[
file2TimeMap[file]=$time;//过滤个别文件
}
}
Co::sleep(5);
}
}