我正在使用Mercurial基於其他存儲庫創建存儲庫(即將它們合併在一起)。這是通過在服務器上使用PHP的一個很好的小型web界面完成的。在多個進程之間共享mercurial命令服務器
不幸的是,對於某些任務來說,這是非常慢的(難怪,PHP目前需要每次執行exec()hg大約40次)。所以我想過使用Mercurial 1.9+中的命令服務器。
就文檔而言,我可以啓動一個簡單的hg serve
並讓它在多個存儲庫上工作(通過給每個命令指定-R
選項)。這很棒。但是,我也可以在多重請求(也可能是併發請求)之間共享命令服務器嗎?
我在做這樣的事情,從我的PHP腳本中啓動服務器:
$cmd = 'hg serve --cmdserver pipe';
$pipes = null;
$descriptors = array(
STDIN => array('pipe', 'r'),
STDOUT => array('pipe', 'w')
);
$process = proc_open($cmd, $descriptors, $pipes);
if (!is_resource($process)) {
throw new Exception('Could not start command server.');
}
但是這使得服務器只適用於當前的PHP程序。由於我不熟悉使用管道和東西,我現在想知道:是否可以啓動服務器一次(在PHP之外)並「連接」它?就像打開一個套接字並讀/寫它一樣。
如果可能的話:明智嗎?當多個PHP進程開始使用一個服務器的套接字/管道/什麼時會發生什麼?
一如既往的簡短和重點。謝謝:-) – xrstf 2012-01-08 15:22:01
這是一個很好的問題,我很高興我們可以在這裏爲其他想知道同樣事情的人記錄它。 – 2012-01-08 15:32:32