Home
Document
Q&A
Video
Donate
Source Code
Code-Galaxy 云原生平台
Business
Swoole Tracker
Swoole Compiler
Login
Register
全部
提问
分享
讨论
建议
公告
开发框架
发表新帖
关于不同进程共用链接的疑问
想在Yii 2.0 中 Command 实现开启子进程处理任务 在子进程中会用到Redis 想知道如下代码是否存在`不同进程使用一个链接`的情况 ### 相关代码 ```php class DataCleanController extends Controller { // 实施监测的应用 private const APPS = [ ['pkg' => 'com.xxx.xxx', 'type' => 'xxx',], ]; private const CACHE_KEY_START_POINT_PREFIX = 'data:c:adTransferRelation:startPoint:'; private const CACHE_KEY_RELATION_PREFIX = 'data:c:adTransferRelation:'; private const INTERVAL = 2; private const CACHE_TTL_RELATION = 30; // 进程最大处理次数 private const MAX_HANDLE = 10000; public function actionRun() { $this->stdout("开始处理\n", Console::FG_GREEN); // 父进程 // Redis 链接 \yii::$app->redis->get(); // 进程管理器 $pm = new Manager(); foreach (self::APPS as $app) { $pm->add(function (Pool $pool, int $workerId) use ($app) { // 子进程 /** @var Process $process */ $process = $pool->getProcess($workerId); // Redis 链接 \yii::$app->redis->get(); // 已处理次数 $handleNum = 0; while (self::MAX_HANDLE > $handleNum) { $handleNum++; $this->handle($app); } }, false); } $pm->start(); $this->stdout("处理结束\n", Console::FG_GREEN); } private function handle($app) { $this->stdout("正在处理 {$app['pkg']}" . PHP_EOL); // Redis 链接 \yii::$app->redis->get(); } } ``` 另外,是否可以提供不同进程共用链接导致数据读写异常的示例。
发布于2月前 · 13 次浏览 · 来自
提问
zxyfaxcn
想在Yii 2.0 中 Command 实现开启子进程处理任务 在子进程中会用到Redis 想知道如下代码是否存在`不同进程使用一个链接`的情况 ### 相关代码 ```php class DataCleanController extends Controller { // 实施监测的应用 private const APPS = [ ['pkg' => 'com.xxx.xxx', 'type' => 'xxx',], ]; private const CACHE_KEY_START_POINT_PREFIX = 'data:c:adTransferRelation:startPoint:'; private const CACHE_KEY_RELATION_PREFIX = 'data:c:adTransferRelation:'; private const INTERVAL = 2; private const CACHE_TTL_RELATION = 30; // 进程最大处理次数 private const MAX_HANDLE = 10000; public function actionRun() { $this->stdout("开始处理\n", Console::FG_GREEN); // 父进程 // Redis 链接 \yii::$app->redis->get(); // 进程管理器 $pm = new Manager(); foreach (self::APPS as $app) { $pm->add(function (Pool $pool, int $workerId) use ($app) { // 子进程 /** @var Process $process */ $process = $pool->getProcess($workerId); // Redis 链接 \yii::$app->redis->get(); // 已处理次数 $handleNum = 0; while (self::MAX_HANDLE > $handleNum) { $handleNum++; $this->handle($app); } }, false); } $pm->start(); $this->stdout("处理结束\n", Console::FG_GREEN); } private function handle($app) { $this->stdout("正在处理 {$app['pkg']}" . PHP_EOL); // Redis 链接 \yii::$app->redis->get(); } } ``` 另外,是否可以提供不同进程共用链接导致数据读写异常的示例。
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
评论
2022-06-09
Rango
协程模式下需要使用连接池,每个协程或请求必须拥有独立的连接。
赞
1
回复
2022-06-12
zxyfaxcn
回复
Rango
这个应用里面我用到了进程管理功能,开了两个子进程来跑任务 在进程设置上未开启协程,不太确定这样是否会出现共用链接使用问题
赞
0
回复
微信公众号
热门内容
- swoole针对400的请求--TRACE Port_onRead_http() (ERRNO 7102): Bad Request: unknown protocol from session#193 on 0.0.0.0:9505
- 基于Swoole+PHP的超高性能短信网关(CMPP、SMPP)模拟器
- http服务中,使用write分段输出文件。设置header总文件长度无用
- Call to undefined function Swoole\Coroutine\run() 是怎么回事啊?
- Swoole Loader扩展 如何下载,https://business.swoole.com/trial/download/ 404
- 请教当使用request主动推送的时候,产生新的连接,及会马上关闭连接问题
- 为什么连接池只创建一个连接
- timer定时器,启动一下,突然执行了1万多次,这是怎么回事呢?
- 在swoole 中, 使用地址引用自身,造成内存增加
- windows 配置wss链接,链接不成功
作者其它话题
- swoole 的定时器形态是什么
- Swoole 4.5.1 taskwait 阻塞无响应
- WARNING swServer_master_onTimer (ERROR 9007): No idle worker is available.
- Timer 与 Worker的关系
- 跨worker 检查客户端fd 是否存在
暂无回复的问答
- 关于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]
- 请问那个一键协程化的代码是放外面还是set里面
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。