使用AJAX请求从客户端中止用C ++编写的长时间运行的CGI脚本

时间:2016-09-10 08:18:25

标签: javascript c++ ajax xmlhttprequest cgi

我有一个用C ++编写的CGI脚本,它在调度类型问题的强力评估中执行一个相对简单的循环。从数据库收集参数,并使用XMLHttpRequest在Web请求中传递参数,从JavaScript中的Web浏览器调用CGI脚本。这很好用。但有时需要太长时间,我希望用户能够在脚本运行时通过单击浏览器中的按钮来中止脚本。

我已经从CGI脚本中查询了一个小文件。该文件可以包含“0”或“1”,表示脚本应该中止。这也有效。但是,文件I / O本身相对而言需要花费大量时间,我想知道是否有更优雅的方式来做到这一点?我只能每隔4到5百万次迭代检查一次,否则我会遇到问题。我可以忍受这种情况,但我想知道我是否可以使用环境变量,例如?

感谢您的任何提示!

2 个答案:

答案 0 :(得分:0)

CGI缺乏灵活性,因此任何解决方案都应该依赖其他方式。

复制策略:

  1. 将该文件放在RAM磁盘上 - 文件IO应该关闭

  2. 用TCP替换FS信令。使执行程序脚本打开一个套接到“abort daemon”,监听专用端口。如果执行程序脚本“socket peeks”,即使“abort daemon”中有一个字节可用,它也会中止。一旦启动,执行程序脚本将只需将打开的端口传递给“中止页面”。另一个脚本,由“Abort”按钮指向URL,需要传送“abort daemon”哪个端口发送“杀手字节”。

  3. 有关运行PHP的服务器的额外信息,您可以尝试使用PHP缓存作为消息传递机制 - 请参阅APC store及相关内容。

    其他缓存似乎存在 - 此处list of others

    也许是矫枉过正 - redis - 他们说

      

    Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理。

    supported languages,C和PHP的大量列表中。似乎足以让wikipedia条目。

答案 1 :(得分:0)

经过一些初步测试后,似乎PHP shmop提供的共享内存工具将是我可用的当前服务器环境中最简单,最安全的工具。非常感谢Adrian Colomitchi指出了我正确的方向(RAM磁盘==共享内存)!