php 内部发信号

发布于 2024-11-08 03:26:57 字数 287 浏览 0 评论 0原文

您好,在实现长时间保持打开状态的连接( comet )时, 我将如何实现 php 程序之间的信号发送(未完成的请求)?

时间线示例:

  • 请求 1 开始
  • 请求 1 执行操作
  • 请求 1 休眠
  • 请求 2 启动
  • 请求 2 执行操作
  • 请求 2 通知请求 1 并进入休眠状态
  • 请求 1 唤醒并发送新数据
  • 请求 1 休眠

我正在徘徊是否有方法哪个使用更少(注意?)CPU 处理

hi when implementing a connection that stays open for a long time ( comet ),
how would i implement signalling between php proses(outstanding requests)??

example timeline:

  • request 1 start
  • request 1 makes action
  • request 1 sleeps
  • request 2 start
  • request 2 makes action
  • request 2 notifies request 1 and go's to sleep
  • request 1 wakes up and sends the new data
  • request 1 sleeps agen

i was wandering if ther was a methode whitch use less(noting?) cpu prosessing

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吹泡泡o 2024-11-15 03:26:57

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

  • 请求 1 启动
  • 请求 1 使操作
  • 请求 1 休眠并读取队列(休眠(1)和读取队列)
  • 请求 2 启动
  • 请求 2 使操作
  • 请求 2 向队列发送消息
  • 请求 1 从队列接收消息,唤醒并发送新数据
  • 请求1 再次睡眠

信号量 你可以在没有 sleep( ) 甚至,但是编码会更困难。

If your platform is Linux/Unix, you can use queues.

  • request 1 start
  • request 1 makes action
  • request 1 sleeps and reading queue (sleep(1) and read queue)
  • request 2 start
  • request 2 makes action
  • request 2 sending message to queue
  • request 1 receives message from queue, wakes up and sends the new data
  • request 1 sleeps again

Whith semaphores you can do this without sleep() even, but it will be more difficult to code.

陌伤浅笑 2024-11-15 03:26:57

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

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

I believe you would have to use pcntl_signal(), along with pcntl_fork(). The server would have to support forking though.

As for the cpu processing load use usleep() in the loop so that the processor has time to be used by other processes.

裸钻 2024-11-15 03:26:57

理想情况下,我会用请求或“作业”来编写它,以便将其写入数据库。

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

script 2 检查数据库中未完成的作业
如果是这样的话
执行并写入返回码
否则睡眠/重复

ideally, I would write this with the requests or "jobs" for the purposes of this being written to a database.

script 1 does something and writes a "job" to the DB
script 1 sleeps for an interval, then checkes to see if there is a returncode for that job in the DB, if so then
act
else sleep/repeat

script 2 checks for uncompleted jobs in the DB
if so then
act and write returncode
else sleep/repeat

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文