swoole管道通信

如果是非常简单的多进程执行任务,那么进程间就不需要通讯了,实际情况下,很多业务是需要通讯的,比如,发邮件,如果自进程发送失败了,那么是要通知主进程的等等。

swoole_process进程间支持2种通信方式:

  1、管道pipe

  2、消息队列

管道通讯

半双工: 数据单向流动, 一端只读, 一端只写。
同步 vs 异步: 默认为同步阻塞模式, 可以使用 swoole_event_add() 添加管道到 swoole 的 event loop 中, 实现异步IO

管道通信是swoole_process默认的一种通信方式。当然我们也可以在实例化的时候通过参数来设定:

$process = new Swoole\Process(‘callback_function‘, false, true);

如果我们打印$process会发现,每次创建一个进程后,就会随之创建一个管道,主进程想和哪一个进程通信,就向那个进程的管道写入/读取数据。

管道有2个方法,分别来写入数据,和读取数据。

  1. $process->write(‘数据‘);#写入数据
  2. $process->read()#读取数据

原文地址:https://www.cnblogs.com/zh718594493/p/12251681.html

时间: 2024-10-01 20:13:43

swoole管道通信的相关文章

管道通信

管道大致分为两种: 1.匿名管道:这个一般只能用于父进程创建管道传递给子进程,可以父子进程通信 2.有名管道:这种管道存在于文件系统中,所以任意进程都能找到,都可以通过它来通信 API: #include <unistd.h> int pipe(int fds[2]) fds[0] 是读取文件描述符,也就是管道出口 fds[1] 是写文件描述符,也就是管道入口 创建一个匿名管道 成功返回0,失败返回-1 int dup(int oldfd);创建文件描述符的副本 int dup2(int ol

C#命名管道通信

原文:C#命名管道通信 C#命名管道通信 最近项目中要用c#进程间通信,以前常见的方法包括RMI.发消息等.但在Windows下面发消息需要有窗口,我们的程序是一个后台运行程序,发消息不试用.RMI又用的太多了,准备用管道通信来做消息通信. 管道通信以前在大学学过,包括匿名管道和命名管道.匿名管道只能用在父子进程之间:命名管道可以用在两个进程甚至跨服务器通信.这里给出命名管道的示例. 服务器端代码 private static void WaitData() { using (NamedPipe

管道通信之无名管道---pipe()

pipe()函数在子进程产生之前就应该存在. 父子进程之间只进行一次传递 1 /*============================================ 2 > Copyright (C) 2014 All rights reserved. 3 > FileName:onepipe.c 4 > author:donald 5 > details: 6 ==============================================*/ 7 #inclu

管道通信,王明学learn

管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4.进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变. 二.通讯发展 Linux进程间通信(IPC:interprocesscommunication)由以下几部分发展而来: 1.UNIX进程间通信 2.基于Sy

PHP多进程编程(2):管道通信

一个进程如果是个人英雄主义,那么多进程就是集体主义.(不严格区分多进程 和 多线程的差别) 你不再是一个独行侠,而是一个指挥家. 独来独往,非常自由自在,但是,很多时候,不如众人拾柴火焰高. 这就是我对多进程的理解.多线程编程的主要问题是:通信 和 同步问题. 更多PHP 多线程编程的背景知识见: PHP多进程编程(一) 在PHP 中,如果光用pcntl ,实现比较简单的通信问题都是很困难的. 下面介绍管道通信: 1. 管道可以认为是一个队列,不同的线程都可以往里面写东西,也都可以从里面读东西.

python Subprocess执行系统命令管道、读取结果【多进程,进程间管道通信】

# -*- coding:utf-8 -*- __author__ = 'magicpwn' import subprocess import sys reload(sys) sys.setdefaultencoding('utf-8') # 执行命令的两个函数,新建进程执行系统命令 s = subprocess.check_call('dir', shell=True) p = subprocess.call('dir', shell=True) print s, p # 执行命令并捕获系统命

管道通信初级

1. pipe管道通信,其实socket也要依赖于它,可以实现双向通信.还能解决并发.比共享内存和邮槽都靠谱.2. 禁止一个程序打开多次,也就是锁定一个程序只能打开一次,限制它的打开次数,用管道就   必须这么做,否则会发生冲突.3.有线程池也有管道池 4.例子 服务端 #include <stdio.h> #include <Windows.h> //管道是存在于操作系统 #define SIZE 4096 char pipename[128] = "\\\\.\\Pi

Linux学习记录--命名管道通信

命名管道通信 什么是命名管道 一个主要的限制是,它是匿名管道的应用还没有名字,因此,只有它可以用于进程间通信的方式与亲缘关系.在命名管道(named pipe或FIFO)提出后,该限制得到了克服.FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中. 这样,即使与FIFO的创建进程不存在亲缘关系的进程,仅仅要可以訪问该路径,就行彼此通过FIFO相互通信 有名管道创建 int mkfifo(const char * pathname, mode_t mode)

进程间管道通信

父子进程间通过管道通信. 管道只能在具有公共祖先的两个进程间使用,通常,一个管道有另一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了. 一般的进程,fd[0]表示读,fd[1]表示写. 如果有用到管道,则写进管道,从管道读. 父子进程之间. 所以,通过简单的read ,write函数,把目标文件设为fd[0] fd[1]即可以完成父子进程间的通信. write用法,read类似.   int write(int handle, void *buf, int nbyte