swoole http服务器task投递异步任务

2024-09-05 08:08

本文主要是介绍swoole http服务器task投递异步任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官网的task案例代码是在tcp服务器中写的,本人在想,http服务器也是server服务器中的一种,应该也可以投递task任务。

一个简单的http服务器代码:

  

$server = new Swoole\Http\Server('127.0.0.1',8888);$server->on('request',function($request, $response) use($server){if(strpos($request->server['request_uri'],'.ico') !== false){$response->end("");}else{$content = $request->server;$response->end("<h1>Hello Swoole. #".rand(1000, 9999).$content['server_port']."</h1>");}});echo "服务器启动!".PHP_EOL;
$server->start();

-------------------------------------------------------------------------------------------------------------------------

官网api中已经说明 :"使用Task功能,必须先设置 task_worker_num,并且必须设置ServeronTaskonFinish事件回调函数"

那么代码修改如下:

$server = new Swoole\Http\Server('127.0.0.1',8888);$server->set(['task_worker_num' =>4
]);$server->on('request',function($request, $response) use($server){if(strpos($request->server['request_uri'],'.ico') !== false){$response->end("");}else{$content = $request->server;$response->end("<h1>Hello Swoole. #".rand(1000, 9999).$content['server_port']."</h1>");}});$server->on("Task",function (Swoole\Server $serv, $task_id, $from_id, $data){echo "异步任务Data:".$data.PHP_EOL;$serv->finish($data);});$server->on("Finish",function (Swoole\Server $serv, $task_id, $data){echo "异步任务结束:".PHP_EOL;echo "异步任务结束,数据:".$data.PHP_EOL;});echo "服务器启动!".PHP_EOL;
$server->start();

上述代码怎么投递任务呢,既然http服务器,那就能使用server中的一些方法,尝试使用connect方法:

$server = new Swoole\Http\Server('127.0.0.1',8888);$server->set(['task_worker_num' =>4
]);$server->on("connect",function ($serv, $fd){echo "链接服务器:".$fd.PHP_EOL;$serv->task('task');
});$server->on('request',function($request, $response) use($server){if(strpos($request->server['request_uri'],'.ico') !== false){$response->end("");}else{$content = $request->server;$response->end("<h1>Hello Swoole. #".rand(1000, 9999).$content['server_port']."</h1>");}
});$server->on("Task",function (Swoole\Server $serv, $task_id, $from_id, $data){echo "异步任务Data:".$data.PHP_EOL;$serv->finish($data);
});$server->on("Finish",function (Swoole\Server $serv, $task_id, $data){echo "异步任务结束:".PHP_EOL;echo "异步任务结束,数据:".$data.PHP_EOL;
});echo "服务器启动!".PHP_EOL;
$server->start();

浏览器访问  http://127.0.0.1:8888/?id=1  的结果:

很明显  connect 方法回调了两次,官网也说明了http服务器在浏览器中方法会有两次请求。说明放在connect方法中投递任务虽然可以但是会有问题。看代码结构 只有在onrequest中回调方法中投递任务是最理想的,可以根据业务来判断是否投递任务,不知道回调方法能不能引用server 变量。代码如下:

$server = new Swoole\Http\Server('127.0.0.1',8888);$server->set(['task_worker_num' =>4
]);$server->on('request',function($request, $response) use($server){if(strpos($request->server['request_uri'],'.ico') !== false){$response->end("");}else{$content = $request->server;$server->task('data');$response->end("<h1>Hello Swoole. #".rand(1000, 9999).$content['server_port']."</h1>");}
});$server->on("Task",function (Swoole\Server $serv, $task_id, $from_id, $data){echo "异步任务Data:".$data.PHP_EOL;$serv->finish($data);
});$server->on("Finish",function (Swoole\Server $serv, $task_id, $data){echo "异步任务结束:".PHP_EOL;echo "异步任务结束,数据:".$data.PHP_EOL;
});echo "服务器启动!".PHP_EOL;
$server->start();

执行文件,浏览器访问结果:

程序没有报错,而且task任务只投递了一次。

这篇关于swoole http服务器task投递异步任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138402

相关文章

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存