2012-01-08 71 views
2

我正在使用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进程开始使用一个服务器的套接字/管道/什么时会发生什么?

回答

1

命令服务器是阻止并且一次只能提供一个请求。目前(如Mercurial 2.0)没有办法通过套接字连接到服务器,就像你建议的那样,尽管它具有该功能肯定会很有趣。

所以你不能用它来加速不同的请求,但是如果一个请求启动40次Mercurial,那么通过使这40个请求通过相同的命令服务器可能已经有很多东西可以获得。

如果您有兴趣从多个(并发)客户端与命令服务器交谈,那么我建议您在Mercurial mailing list处开始讨论。

+0

一如既往的简短和重点。谢谢:-) – xrstf 2012-01-08 15:22:01

+0

这是一个很好的问题,我很高兴我们可以在这里为其他想知道同样事情的人记录它。 – 2012-01-08 15:32:32

相关问题