用AJAX请求从客户机终止用c++编写的长时间运行的CGI脚本
Aborting a long-running CGI script written in C++ from client with AJAX request
我有一个用c++编写的CGI脚本,它在调度类型问题的蛮力计算中执行一个相对简单的循环。参数从数据库中收集,CGI脚本在web浏览器中使用JavaScript使用XMLHttpRequest在POST请求中传递参数来调用。这很好。但是有时它需要太长时间,我希望用户能够通过在脚本运行时单击浏览器中的按钮来中止脚本。
我已经从CGI脚本内部轮询了一个小文件。该文件可以包含'0'或'1',表示脚本应该中止。这也有用。然而,相对而言,文件I/O本身需要花费很多时间,我想知道是否有更优雅的方法来做到这一点?我只能每四五百万次迭代检查一次,否则就会遇到问题。我可以忍受,但我想知道我是否可以用环境变量来做到这一点,例如?
谢谢你的建议!
CGI是不灵活的,所以任何解决方案都应该依赖于其他方法。
复制策略:
-
将该文件放到ram磁盘上-文件IO应该下降
-
用TCP信令代替FS信令。让执行器脚本打开一个套接字,用于监听专用端口的"中止守护进程"。如果执行器脚本"socket"从"abort守护进程"中窥探到一个字节可用,它就会终止。一旦启动,执行脚本将只需要将打开的端口通信到"中止页面"。另一个由"Abort"按钮指向url的脚本需要与"Abort守护进程"通信,该端口发送"杀手字节"。
关于服务器运行PHP的额外信息,您可以尝试使用PHP缓存作为消息传递机制-参见APC store和相关内容。
其他缓存似乎存在-这里列出了其他缓存。
也许是矫枉过正- redis -他们说
Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理。
拥有大量支持的语言,包括C和PHP。值得注意的是在维基百科上有一个条目
经过一些初步测试,似乎PHP shmop
提供的共享内存设施将是我在当前可用的服务器环境中使用的最简单和最安全的。非常感谢Adrian Colomitchi,他为我指出了正确的方向(RAM磁盘==共享内存)!
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- 如何使用 javascript 停止对 asp.net 进行正在进行的回发(长时间运行的执行)
- 如何修复长时间运行的脚本
- 长时间运行的脚本IE与Chrome/Firefox
- 有没有一种方法可以在长时间运行的JavaScript操作之前强制回流
- 我可以/如何显式终止长时间运行的 xhr 请求
- AJAX 可访问的长时间运行的服务任务阻止在启用 ASP.NET 兼容性/会话的环境中的后续 AJAX 服务请求
- JQuery新手:长时间运行的函数需要setTimeout吗
- Javascript:在长时间运行的Javascript函数期间显示Throbber
- 长时间运行的AJAX请求在几分钟后重新提交
- JavaScript和UI响应中的长时间运行循环
- spin.js没有'它不会在长时间运行的任务中显示,但当我逐步通过调试器时会显示
- 谷歌分析是否有一个“;心跳;用于长时间运行的web应用程序的功能
- DOM操作被长时间运行的func阻塞,之后调用
- 如何在长时间运行的事件中更新页面元素
- 使用数据表时,IE8长时间运行脚本错误
- 对长时间运行的函数进行DOM刷新
- 如何在长时间运行的服务器操作期间与用户交互(例如确认对话框)
- Javascript -我希望在长时间运行的函数运行之前显示复选框
- 如何在javascript中分解长时间运行的函数,但保持性能