2012-03-15 62 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