在多个进程之间共享mercurial命令服务器

时间:2012-01-08 03:07:06

标签: php mercurial process pipe

我使用Mercurial基于其他存储库创建存储库(即将它们合并在一起)。这是通过在服务器上使用PHP的漂亮的小型Web界面完成的。

不幸的是,对于某些任务来说这是非常慢的(难怪,PHP目前必须每次请求exec()hg大约40次)。所以我考虑使用Mercurial 1.9 +中提供的命令服务器。

就文档而言,我可以启动一个简单的hg serve并让它在多个存储库上工作(通过为每个命令提供-R选项)。这很棒。但我还可以在mutliple(可能是并发)请求之间共享命令服务器吗?

我正在做这样的事情,从我的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之外)和" connect"对吗?就像打开一个套接字并读/写它一样。

如果可能的话:这是明智的吗?当多个PHP进程开始使用一个服务器的套接字/管道/其他什么时会发生什么?

1 个答案:

答案 0 :(得分:1)

命令服务器阻止,一次只能处理一个请求。目前(从Mercurial 2.0开始)无法像你建议的那样通过套接字连接到服务器,尽管拥有该功能肯定会很有趣。

因此,您无法使用它来加速不同的请求,但如果单个请求启动Mercurial 40次,那么通过使这40个请求通过相同的命令服务器可能已经有很多收获。

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