首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
服务端有什么方法能结束任务,而不影响其他任务
### 问题描述 server 开启服务,产生task_worker_num 个任务服务, 客户端发送任务,当连续发送了三个任务后, server 处理任务,有对应得$task_id, 0, 1, 2 从客户端,或者一个新的客户端发送一个指定 $task_id ,0, 结束这个任务得的消息, 服务端 这边可以通过什么方式或者方法,进行结束这个指定的任务,从而不影响其他得任务1,2 ? ### Swoole版本,PHP版本,以及操作系统版本信息 ``` Swoole版本 [root@localhost test]# php --ri swoole swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.7.1 Built => Aug 25 2021 16:45:34 coroutine => enabled with boost asm context epoll => enabled eventfd => enabled signalfd => enabled cpu_affinity => enabled spinlock => enabled rwlock => enabled sockets => enabled openssl => OpenSSL 1.0.2k-fips 26 Jan 2017 http2 => enabled pcre => enabled zlib => 1.2.7 mutex_timedlock => enabled pthread_barrier => enabled futex => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => On => On swoole.unixsock_buffer_size => 8388608 => 8388608 ``` ``` PHP版本 [root@localhost test]# php --version PHP 7.2.16 (cli) (built: Aug 23 2021 12:23:42) ( ZTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies ``` ``` 操作系统版本信息 [root@localhost test]# cat /proc/version Linux version 3.10.0-1160.24.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Apr 8 19:51:47 UTC 2021 ``` ### 相关代码 `server.php 文件` ```php <?php use Swoole\Coroutine\Client; use function Swoole\Coroutine\run; run(function () { $client = new Client(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, 0.5)) { echo "connect failed. Error: {$client->errCode}\n"; } $client->send("hello world\n"); echo $client->recv(); $client->close(); }); [root@localhost test]# cat server.php <?php use Swoole\Server; $serv = new Swoole\Server('127.0.0.1', 9501); $serv->set([ 'task_worker_num' => 4 ]); $serv->on('Receive', function($serv, $fd, $reactor_id, $data) { $task_id = $serv->task($data); echo "Dispatch AsyncTask: id={$task_id} -- fd={$fd} \n"; }); $serv->on('Task', function ($serv, $task_id, $reactor_id, $data){ echo "New AsyncTask[id={$task_id}]".PHP_EOL; $i = 0; while (1) { sleep(10); print_r($task_id); $i++; if ($i == 4){ break; } } $serv->finish("{$data} -> OK"); }); $serv->on('Finish', function ($serv, $task_id, $data) { echo "AsyncTask[{$task_id}] Finish: {$data}".PHP_EOL; }); $serv->start(); ``` `cilent.php 文件` ```php <?php use Swoole\Coroutine\Client; use function Swoole\Coroutine\run; run(function () { $client = new Client(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, 0.5)) { echo "connect failed. Error: {$client->errCode}\n"; } $client->send("hello world\n"); echo $client->recv(); $client->close(); }); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 我想咨询且了解,在服务端 通过什么方法或属性, 通过客户端发送得任务ID 能在服务端结束任务? 或者是服务端有什么方法能结束任务,不影响其他任务?
发布于3年前 · 19 次浏览 · 来自
提问
潦草得人生
### 问题描述 server 开启服务,产生task_worker_num 个任务服务, 客户端发送任务,当连续发送了三个任务后, server 处理任务,有对应得$task_id, 0, 1, 2 从客户端,或者一个新的客户端发送一个指定 $task_id ,0, 结束这个任务得的消息, 服务端 这边可以通过什么方式或者方法,进行结束这个指定的任务,从而不影响其他得任务1,2 ? ### Swoole版本,PHP版本,以及操作系统版本信息 ``` Swoole版本 [root@localhost test]# php --ri swoole swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.7.1 Built => Aug 25 2021 16:45:34 coroutine => enabled with boost asm context epoll => enabled eventfd => enabled signalfd => enabled cpu_affinity => enabled spinlock => enabled rwlock => enabled sockets => enabled openssl => OpenSSL 1.0.2k-fips 26 Jan 2017 http2 => enabled pcre => enabled zlib => 1.2.7 mutex_timedlock => enabled pthread_barrier => enabled futex => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => On => On swoole.unixsock_buffer_size => 8388608 => 8388608 ``` ``` PHP版本 [root@localhost test]# php --version PHP 7.2.16 (cli) (built: Aug 23 2021 12:23:42) ( ZTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies ``` ``` 操作系统版本信息 [root@localhost test]# cat /proc/version Linux version 3.10.0-1160.24.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Apr 8 19:51:47 UTC 2021 ``` ### 相关代码 `server.php 文件` ```php <?php use Swoole\Coroutine\Client; use function Swoole\Coroutine\run; run(function () { $client = new Client(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, 0.5)) { echo "connect failed. Error: {$client->errCode}\n"; } $client->send("hello world\n"); echo $client->recv(); $client->close(); }); [root@localhost test]# cat server.php <?php use Swoole\Server; $serv = new Swoole\Server('127.0.0.1', 9501); $serv->set([ 'task_worker_num' => 4 ]); $serv->on('Receive', function($serv, $fd, $reactor_id, $data) { $task_id = $serv->task($data); echo "Dispatch AsyncTask: id={$task_id} -- fd={$fd} \n"; }); $serv->on('Task', function ($serv, $task_id, $reactor_id, $data){ echo "New AsyncTask[id={$task_id}]".PHP_EOL; $i = 0; while (1) { sleep(10); print_r($task_id); $i++; if ($i == 4){ break; } } $serv->finish("{$data} -> OK"); }); $serv->on('Finish', function ($serv, $task_id, $data) { echo "AsyncTask[{$task_id}] Finish: {$data}".PHP_EOL; }); $serv->start(); ``` `cilent.php 文件` ```php <?php use Swoole\Coroutine\Client; use function Swoole\Coroutine\run; run(function () { $client = new Client(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, 0.5)) { echo "connect failed. Error: {$client->errCode}\n"; } $client->send("hello world\n"); echo $client->recv(); $client->close(); }); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 我想咨询且了解,在服务端 通过什么方法或属性, 通过客户端发送得任务ID 能在服务端结束任务? 或者是服务端有什么方法能结束任务,不影响其他任务?
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
还没有评论!
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。