【问题标题】:Talking to a PHP Daemon与 PHP 守护进程对话
【发布时间】:2012-03-15 05:27:27
【问题描述】:

我正在用 php 开发一个小型服务器守护程序,它将与各种远程客户端进行通信 - 很简单。然而,在同一台机器上运行的另一个守护进程将需要与第一个通信,尽可能快,但可能会不断发送数百 KB 的数据(希望在 20 HTZ 内)。我很肯定我想在这两个守护进程之间使用 tcp 连接,但这就是我需要一些建议的地方。现在在你问之前,我不能简单地将两者结合到同一个守护进程中的原因是因为第二个可以并且将用多种语言之一编写,包括 java、.net、c++、python、ruby 等。如果有办法为了让 PHP 在不使用 tcp 连接(或使用无法满足我的需要的系统调用)且不牺牲性能的情况下与另一种语言对话,我全神贯注,但我一直在寻找一种方法来做到这一点并且我真的找不到一种干净、简单的方法——至少不是“一刀切”的时尚。

【问题讨论】:

  • Unix 域套接字总是比 TCP 更快。不要将 tcp 用于仅限本地的通信。

标签: php daemon


【解决方案1】:

由于其他进程将在同一台机器上,使用proc_open() 怎么样,那么您只需从创建的管道(stdin/stdout 等)中写入/读取?

它类似于system()/popen() 调用,但它允许您对其他进程进行读写,当然也避免了 TCP 套接字的开销。

【讨论】:

  • 太棒了!我会试一试..即使我在单个写入/读取操作中达到大约 1MB 的数据峰值,您认为这会很好吗?
  • @Xealgo 是的,没问题 - 通过 UNIX 套接字(管道)进行的通信非常非常快。
【解决方案2】:

您可以使用套接字。 PHP有一个socket实现:http://www.php.net/manual/en/ref.sockets.php

我只真正用 C 编写过套接字编程,但您列出的大多数其他语言应该都能很好地使用套接字。

在 PHP 中,您将使用 socket_bind() 连接到套接字。同样,您需要在其他守护程序上执行等效操作。

【讨论】:

  • 我已经在这方面做了一些工作,但还是感谢您的发帖!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2013-01-19
  • 2012-01-13
相关资源
最近更新 更多