2012-03-15 65 views
2

我正在PHP中开发一个小型服务器守护进程,它将与各种远程客户端进行通信 - 非常简单。然而,运行在同一台机器上的另一个守护进程需要尽可能快地与第一个进行通信,但可能会不断发送数百KB的数据(希望在20 HTZ范围内)。我非常积极的想要在这两个守护进程之间使用tcp连接,但这正是我需要一些建议的地方。现在在你问之前,我不能简单地将它们组合成同一个守护进程的原因是,第二个可以用多种语言之一编写,包括java,.net,C++,python,ruby等。如果有一种方法为了使PHP与另一种语言无需使用tcp连接(或使用不适合我需要的系统调用)并且不牺牲性能,我都是耳朵,但我一直在寻找一种方法来做到这一点,我无法真正找到一种干净而简单的方式 - 至少不是一种“适合所有人”的时尚方式。与PHP守护进程交谈

+1

Unix域套接字总是比TCP更快。不要将tcp用于本地通信。 – 2012-03-15 05:45:54

回答

2

由于其他进程将在同一台机器上,如何使用proc_open(),那么你只需写入/读取管道(标准输入/标准输出等)创建?

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

+0

太棒了!我会给你一个尝试..你认为即使我在单个写入/读取操作中说出1MB的数据,这种方法也能正常工作吗? – Xealgo 2012-03-15 05:57:13

+1

@Xealgo是的,没问题 - 通过UNIX套接字(管道)进行通信的速度非常快。 – 2012-03-15 07:51:05

1

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

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

在PHP中,您将使用socket_bind()连接到套接字。同样,您需要在另一个守护进程上执行相同的操作。

+0

我已经在这工作了一下,但是谢谢你发帖! – Xealgo 2012-03-15 05:55:51