首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >广播式IPC

广播式IPC
EN

Stack Overflow用户
提问于 2010-08-19 12:43:14
回答 1查看 1K关注 0票数 2

考虑到让进程或线程相互交互的所有选项(锁、互斥锁、信号量、消息队列、共享内存等),我有点不知所措。

我希望有几个进程等待某个事件的发生。也就是说,我希望他们要么阻止,要么直到

  1. 达到特定的超时,或者由另一个进程触发特定的事件。

在任何时候,都可以有任意数量的此类等待过程,当唤醒事件发生时,所有这些进程都必须唤醒,而不仅仅是一个。

其中一个限制可能会让这件事变得更加困难:它必须是PHP,而且它还必须来自运行在apache中的mod_php。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-19 13:37:13

嗯,有点“无趣”,但你可以用套接字来做。这取决于你想做什么..。我真的很想知道你是否真的需要这种系统(而不是试图把过程简化到他们根本不需要IPC的地方).

创建一个“侦听器”deamon,它只接受套接字连接并将它们放入队列中。它将运行socket_select,等待新连接或数据被写入套接字。如果数据被写入,它会将该数据写入其所有活动连接,然后关闭它们并重新启动。如果接收到一个新连接,它会将其放入队列,然后返回到选择.

因此,在您的“子”中,您所需要做的就是连接到主服务器,设置阻塞socket_set_block($sock),然后设置超时:

代码语言:javascript
复制
socket_set_option(
    $sock,
    SOL_SOCKET,  // socket level
    SO_SNDTIMEO, // timeout option
    array(
        "sec"=>10, // Timeout in seconds
        "usec"=>0  // I assume timeout in microseconds
    )
);

然后,只需从套接字(socket_read($sock))读取即可。它将阻塞直到您设置的超时,或直到“主”写回它。传递该调用后,只需关闭套接字并继续执行您想做的事情.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3521857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档