我有一个用C ++编写的CGI脚本,它在调度类型问题的强力评估中执行一个相对简单的循环。从数据库收集参数,并使用XMLHttpRequest在Web请求中传递参数,从JavaScript中的Web浏览器调用CGI脚本。这很好用。但有时需要太长时间,我希望用户能够在脚本运行时通过单击浏览器中的按钮来中止脚本。
我已经从CGI脚本中查询了一个小文件。该文件可以包含“0”或“1”,表示脚本应该中止。这也有效。但是,文件I / O本身相对而言需要花费大量时间,我想知道是否有更优雅的方式来做到这一点?我只能每隔4到5百万次迭代检查一次,否则我会遇到问题。我可以忍受这种情况,但我想知道我是否可以使用环境变量,例如?
感谢您的任何提示!
答案 0 :(得分:0)
CGI缺乏灵活性,因此任何解决方案都应该依赖其他方式。
复制策略:
将该文件放在RAM磁盘上 - 文件IO应该关闭
用TCP替换FS信令。使执行程序脚本打开一个套接到“abort daemon”,监听专用端口。如果执行程序脚本“socket peeks”,即使“abort daemon”中有一个字节可用,它也会中止。一旦启动,执行程序脚本将只需将打开的端口传递给“中止页面”。另一个脚本,由“Abort”按钮指向URL,需要传送“abort daemon”哪个端口发送“杀手字节”。
有关运行PHP的服务器的额外信息,您可以尝试使用PHP缓存作为消息传递机制 - 请参阅APC store及相关内容。
其他缓存似乎存在 - 此处list of others。
也许是矫枉过正 - redis - 他们说
Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理。
在supported languages,C和PHP的大量列表中。似乎足以让wikipedia条目。
答案 1 :(得分:0)
经过一些初步测试后,似乎PHP shmop
提供的共享内存工具将是我可用的当前服务器环境中最简单,最安全的工具。非常感谢Adrian Colomitchi指出了我正确的方向(RAM磁盘==共享内存)!