我使用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进程开始使用一个服务器的套接字/管道/其他什么时会发生什么?
答案 0 :(得分:1)
命令服务器阻止,一次只能处理一个请求。目前(从Mercurial 2.0开始)无法像你建议的那样通过套接字连接到服务器,尽管拥有该功能肯定会很有趣。
因此,您无法使用它来加速不同的请求,但如果单个请求启动Mercurial 40次,那么通过使这40个请求通过相同的命令服务器可能已经有很多收获。
如果您有兴趣与多个(并发)客户端的命令服务器通信,那么我建议您在Mercurial mailing list开始讨论它。