视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Thinkphp5.1里使用workerman的方法
2020-11-03 18:18:46 责编:小OO
文档


这样的格式执行。于是修改index.php文件绑定路由

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get('app')->bind("workerman/index")->run()->send();

直接运行php index.php start,汗,居然提示说找不到start该模型。特么tp5把start作为路由解析了。那怎么办,workerman的需要使用start的方式执行,tp5却要把该参数解析成模型啊。

后查阅资料发现,Thinkphp5.1本身就整合了workerman了。可以使用thinkphp5的方式安装workerman,那样就可以使用thinkphp的运行方式运行了。

执行命令改成:

php think worker

后续发现Thinkphp5.1整合的workerman封装的有点麻烦,不好用,而且如果你想用PHPSocketIO之类的workerman服务用整合的方式很麻烦。

workerman把第一个参数作为操作服务的命令,那我把它改成用第二个参数作为操作命令行不行?

果然就是这么做的。查找workerman插件里面的parseCommand()函数。这个鬼函数就是获取那个操作命令的,把:

argv[1]改成argv[2],argv[2]改成argv[2]改成argv[2]改成argv[3]

 protected static function parseCommand()
 {
 if (static::$_OS !== OS_TYPE_LINUX) {
 return;
 }
 global $argv;
 // Check argv;
 $start_file = $argv[0];
 $available_commands = array(
 'start',
 'stop',
 'restart',
 'reload',
 'status',
 'connections',
 );
 $usage = "Usage: php yourfile <command> 
 [mode]
Commands: 
start	Start worker in DEBUG mode.
	Use mode -d to start in DAEMON mode.
stop	Stop worker.
	Use mode -g to stop gracefully.
restart	Restart workers.
	Use mode -d to start in DAEMON mode.
	Use mode -g to stop gracefully.
reload	Reload codes.
	Use mode -g to reload gracefully.
status	Get worker status.
	Use mode -d to show live status.
connections	Get worker connections.
";
 if (!isset($argv[2]) || !in_array($argv[2], $available_commands)) {
 if (isset($argv[2])) {
 static::safeEcho('Unknown command: ' . $argv[2] . "
");
 }
 exit($usage);
 }

 // Get command.
 $command = trim($argv[2]);
 $command2 = isset($argv[3]) ? $argv[3] : '';

执行命令改成

php server.php index start

(第一个参数用于Thinkphp解析路由,第二个参数用于workerman解析操作服务命令)

更多workerman知识请关注PHP中文网workerman框架教程栏目。

下载本文
显示全文
专题