Perl 脚本 运行 一个周期性(主要)任务并提供一个 REST 接口

Perl script running a periodic (main) task and providing a REST interface

我正在开发一个 Perl 脚本,它根据文件系统内容进行一些定期处理。 整体结构是这样的:

# ... initialization...

while(1) {
    # ... scan filesystem, perform actions depending on changes detected ...
    sleep 5;
}

我想添加通过 HTTP 公开接口的方式将一些数据输入到此进程中的功能。例如。我想添加一个端点来跳过睡眠,还有一些方法来输入在下一次迭代中处理的数据。此外,我希望能够通过 HTTP 查询某些程序的状态(即简单的 fork() 到 运行 单独进程中的网络服务器部分是否不够?)

到目前为止,我已经使用过 Dancer2 框架一次,但它有一个 start; 调用阻塞,因此不允许任何其他任务(如我的循环)到 运行 .此外,我当然可以将当前在循环内的代码移动到通过 Dancer2 公开的端点,但随后我需要定期调用它(通过外部程序?)这似乎是一个相当模糊的间接比较只是让网络服务器部分 运行ning 在后台。

是否可以不引人注目地(即不阻塞程序)向 Perl 脚本添加 REST 服务器功能?如果是:哪些模块将用于此目的?如果不是:我真的应该实施一个外部流程来定期调用某个端点还是完全寻求不同的解决方案?

(我曾尝试添加 dancer2 标签,但由于声誉不足而无法添加。请不要被这个误导:到目前为止,我只尝试过 Dancer2 而不是Dancer (v.1))

您可以尝试在后台线程中启动处理循环,然后再 运行 start;

man perlthrtut

您可能希望use threads::shared;声明一些在 REST 部分和后台线程之间共享的变量。或者使用专用的 queues/event 机制。