最新的tp5.1集成workerman提供了两个web_server和socket_server的例子,其中socket_server可以在配置文件中直接设置workerman回调函数,也是很方便的.
不过我个人觉得这样很不方便,不太优雅,这种方式只是把原来workerman的业务代码放到tp5里,如果是我,我会觉得把这部分代码写到控制器里会舒服一些.
并且官方没有给出更灵活的开发workerman的方式,比如我只想用workerman的多进程特性做爬虫,官方的手册没有提供相关例子,所以我在这记录下我的解决方式.
目标
我可以使用下面的命令启动我的爬虫,并且我只需要关注workerman的onworkerstart回调,把业务代码写到控制器里.
php think spider start
方式
- 利用tp5.1的自定义指令特性
- 在相关控制器直接继承wokerman的worker类
- 在指令部分把控制器的方法赋值到wokerman的属性中做为回调方法
自定义指令
详细的做法请参考tp官方手册,这里直接贴步骤.
修改application/command.php
return [
'app\common\command\Spider',
];
新建common模块,command目录,spider类