我有一个在主机A上运行的web应用程序,它在另一个主机B上运行几个命令,我想在A上的网页上显示在B上运行的命令的输出,即我想在A上的网页上创建一种B的控制台的实况流。
为此,我将B控制台的输出重定向到A上的一个套接字,并将输出保存在A上的一个文件中。
我启动了一个ajax调用,它启动了从B开始的进程(使用web2py控制器)。这个ajax调用还处理B的控制台到A的套接字的重定向。
从网页中,我启动了另一个ajax,它读取存储套接字数据的文件。
现在我面临的问题是,当我触发secodn ajax调用时,它不会返回到网页,直到第一个ajax调用返回。
我想知道这是做这件事的正确方法。我还想知道,我面临的问题是由于ajax或web2py框架?
发布于 2013-02-03 22:20:28
默认情况下,会话文件在每次请求时都被锁定,因此来自同一客户端的新请求将被阻止,直到前一个请求完成并且会话文件被解锁(请参见here)。要避免此问题,可以执行以下操作之一:
session.forget(response)。这将解锁会话文件(从而阻止为该请求保存会话)。您可以将此行包含在Ajax函数本身的开头,也可以将其包含在模型文件的前面:if request.function in list,of,ajax,functions:数据库或cookies中的session.forget(response)
dict(web2py_disable_session=True)。这将阻止框架自动连接该路由的会话(您仍然可以在应用程序代码中手动连接会话)。从理论上讲,这比第一种方法更有效,因为它完全防止了会话文件被锁定(使用第一种方法,框架最初仍然锁定会话文件,然后您的应用程序代码稍后将其解锁)。https://stackoverflow.com/questions/14670867
复制相似问题