【问题标题】:Share mercurial command server between multiple processes在多个进程之间共享 mercurial 命令服务器
【发布时间】:2012-01-08 03:07:05
【问题描述】:

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

不幸的是,对于某些任务来说,这非常慢(难怪,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 进程开始使用一个服务器的 socket/pipe/whatever 时会发生什么?

【问题讨论】:

    标签: php mercurial process pipe


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是一个很好的问题,我很高兴我们可以在这里为其他想知道同样事情的人记录下来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多