当前位置: 首页 > news >正文

网站建设方面的书籍推荐绵阳做绵阳做网站网站

网站建设方面的书籍推荐,绵阳做绵阳做网站网站,网站多种语言是怎么做的,dw制作wap网站怎么做swoole文档:Swoole 文档 process子进程和父进程之间通信,依靠监听。子进程和父进程分别做监听。父进程写入信息,子进程监听接收。子进程向父进程写入,调用父进程监听。 子进程向父进程写入信息有两种方式,一种调用wr…

swoole文档:Swoole 文档

process子进程和父进程之间通信,依靠监听。子进程和父进程分别做监听。父进程写入信息,子进程监听接收。子进程向父进程写入,调用父进程监听。

子进程向父进程写入信息有两种方式,一种调用write写入管道,一种是直接输出写入管道。在创建进程的时候控制。

一 调用write写入管道

function test3()
{$p = new Swoole\Process(function ($worker) {Swoole\Event::add($worker->pipe, function () use ($worker) {$data = $worker->read();echo "sub:" . $data . PHP_EOL;$data = 'worker:' . $data;$worker->write($data); //写入父线程 2});}, false, 2);$p->start();Swoole\Event::add($p->pipe, function () use ($p) {$data = $p->read();echo 'P:' . $data . PHP_EOL; //最终输出 3});$p->write('123'); //请求子线程 1
}
test3();
sub:123
P:worker:123

二 直接输出到管道

function test2()
{$p = new Swoole\Process(function ($worker) {Swoole\Event::add($worker->pipe, function () use ($worker) {$data = $worker->read();echo 'worker:' . $data . PHP_EOL; //直接写入父线程 2});}, true, 2);$p->start();Swoole\Event::add($p->pipe, function () use ($p) {$data = $p->read();echo 'P:' . $data . PHP_EOL; //最终输出 3});$p->write('123'); //请求子线程 1
}
test2();
P:worker:123

新建process之后,在其回调中创建的监听是子进程的监听,使用其对象创建的监听是父进程的监听。

三 其他

其实子进程不做监听也能收到父进程发送的信息,但是直接读信息和监听都存在的情况下,先执行直接读取的,可能监听不会执行。根据文档,监听必须在线程启动后设置。根据查的资料,event触发条件是句柄文件的改变,即类似于例子中的$p->pipe改变,否则不会触发。

使用event监听是异步的。看到b站上有个例子代码如下

 public function onMessage(Swoole\WebSocket\Server $server, Swoole\WebSocket\Frame $frame){$data = $frame->data;$data = json_decode($data);$cmd = $data['cmd']; //命令$fd = $frame->fd;$is_block = isset($data['is_block']) ? $data['is_block'] : 0;if ($is_block) {if (isset($this->process_list[$fd])) {$process = $this->process_list[$fd];} else {//新建子进程$process = new Swoole\Process([$this, 'do_time_process'], true, 2);$process->start();$this->process_list[$fd] = $process;Swoole\Event::add($process->pipe, function () use ($process, $frame) {$data = $process->read();$this->server->push($frame->fd, $data);});}$process->write($cmd);sleep(1);} else {$this->process->write($cmd);$data = $this->process->read();$this->server->push($frame->fd, $data);}}//子进程public function do_time_process(Swoole\Process $worker){$cmd = $worker->read();//函数打开进程文件指针。打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生$handle = popen($cmd, 'r');Swoole\Event::add($worker->pipe, function () use ($worker, $handle) {$cmd = $worker->read();if ('exit' == $cmd) {$worker->exit();}//向管道写入内容fwrite($handle, $cmd);});//feof() 函数检查是否已到达文件末尾(EOF)while (!feof($handle)) {$str = fread($handle, 18192);$worker->write($str); //向父进程写入//echo $str;}}

do_time_process中设置event监听的目的是,在执行不会自己结束的命令时,可以再次设置命令执行退出等操作。比如linux中ping命令。还没测试好,本来想写个例子试试,但是按照以上内容写的,子进程中的监听一直没有被触发。

四 参考

【swoole 入门课程】https://www.bilibili.com/video/BV1dt411a7Tb?p=4&vd_source=f1bd3b5218c30adf0a002c8c937e0a27

swoole_event_add · Swoole文档 · 看云

PHP swoole的process模块创建和使用子进程操作示例_php技巧_脚本之家

带你学习swoole_process详解 · php开发笔记 · 看云

http://www.yayakq.cn/news/375771/

相关文章:

  • html 做网站的模板互联网网站建设案例
  • php餐饮网站营销到底是干嘛的
  • 北京网站制作西安宁波网页设计多少钱
  • 五级偏黄视频网站建设国外优秀网站模板
  • 专业的网站建设联系方式网架公司招聘信息
  • 风景旅游网站建设的设计思路呼和浩特网站开发 千投
  • 岳阳云溪区建设局网站室内设计师招聘简章
  • 南昌做网站电话网络营销策划书范文
  • wordpress 屏蔽搜索引擎一键优化什么意思
  • 广州网站建设索王道下拉有哪些可以在网上做兼职的网站
  • 做海报免费素材网站有哪些制作网页所用的语言是什么
  • 网站建设大作业北京 网站建设大全
  • 网站怎么添加导航栏python官方网站
  • 无法访问此网站是什么原因物流百度推广怎么做网站
  • 展示型网站有哪些ux主题wordpress
  • 天津建设厅官方网站j2ee 做网站
  • 有源码手机怎么搭建网站河北建设厅网站修改密码在哪
  • 重庆南昌网站建设辽宁建设工程信息网招标
  • p2p网站如何做推广网站上点击图片局部放大如何做
  • vs网站开发视频教程环球经贸网
  • 江西求做网站wordpress 评论通知
  • php 导航网站有没有可以免费做试卷的网站_最好可以学会...
  • 苏州建设工程检测协会网站深圳网站设计公司排名前十
  • 网站制作深圳乡村振兴网站建设
  • 网站建设合同属于技术服务合同吗瓜子二手车网站开发
  • 开发区网站制作公司美容养生行业WordPress主题
  • 网站设计制作价格怎么样网络营销案例有哪些
  • h5 建站网站 移动端网站点击量查询
  • php网站开发程序编译软件网站建设私活
  • 创建网站基本步骤用微信怎么做商城网站