在php内部发信号

时间:2011-05-16 20:24:49

标签: php multithreading http

当实现长时间保持打开的连接(彗星)时, 我将如何在php proses(未完成的请求)之间实现信令?

示例时间表:

  • 请求1开始
  • 请求1采取行动
  • 请求1睡觉
  • 请求2开始
  • 请求2采取行动
  • 请求2通知请求1并进入休眠状态
  • 请求1唤醒并发送新数据
  • 请求1睡觉agen

我是在徘徊,如果这是一个使用较少的方法(注意?)cpu prosessing

3 个答案:

答案 0 :(得分:3)

如果您的平台是Linux / Unix,则可以使用queues

  • 请求1开始
  • 请求1采取行动
  • 请求1睡眠和读取队列(睡眠(1)和读取队列)
  • 请求2开始
  • 请求2采取行动
  • 请求2向队列发送消息
  • 请求1从队列接收消息,唤醒并发送新数据
  • 请求1再次入睡

Whith semaphores你可以在没有sleep()的情况下做到这一点,但编码会更加困难。

答案 1 :(得分:1)

我相信您必须使用pcntl_signal()以及pcntl_fork()。服务器必须支持分叉。

对于cpu处理负载,在循环中使用usleep(),以便处理器有时间被其他进程使用。

答案 2 :(得分:0)

理想情况下,我会将这些请求或“作业”写入此目的,以便将其写入数据库。

脚本1执行某些操作并将“作业”写入数据库 脚本1休眠一段时间,然后检查数据库中是否有该作业的返回码,如果是,则检查 行为
别的睡觉/重复

脚本2检查数据库中未完成的作业 如果是的话那么 行动并写回报码
别的睡觉/重复