考虑到让进程或线程相互交互的所有选项(锁、互斥锁、信号量、消息队列、共享内存等),我有点不知所措。
我希望有几个进程等待某个事件的发生。也就是说,我希望他们要么阻止,要么直到
在任何时候,都可以有任意数量的此类等待过程,当唤醒事件发生时,所有这些进程都必须唤醒,而不仅仅是一个。
其中一个限制可能会让这件事变得更加困难:它必须是PHP,而且它还必须来自运行在apache中的mod_php。
发布于 2010-08-19 13:37:13
嗯,有点“无趣”,但你可以用套接字来做。这取决于你想做什么..。我真的很想知道你是否真的需要这种系统(而不是试图把过程简化到他们根本不需要IPC的地方).
创建一个“侦听器”deamon,它只接受套接字连接并将它们放入队列中。它将运行socket_select,等待新连接或数据被写入套接字。如果数据被写入,它会将该数据写入其所有活动连接,然后关闭它们并重新启动。如果接收到一个新连接,它会将其放入队列,然后返回到选择.
因此,在您的“子”中,您所需要做的就是连接到主服务器,设置阻塞socket_set_block($sock),然后设置超时:
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))读取即可。它将阻塞直到您设置的超时,或直到“主”写回它。传递该调用后,只需关闭套接字并继续执行您想做的事情.
https://stackoverflow.com/questions/3521857
复制相似问题