我有一个在主机A上运行的网络应用程序,它在另一台主机B上运行一些命令,我想在A上显示的网页上显示B上运行的命令的输出,即我想创建一个在A上的网页上实时流式传输B的控制台。
为此,我所做的是将B控制台的输出重定向到A上的套接字,并将输出保存在A上的文件中。
我发起一个启动进程的ajax调用(使用web2py控制器)从B开始。这个ajax调用还处理B控制台重定向到A的套接字。
从网页上我发出另一个ajax,它读取存储套接字数据的文件。
现在我面临的问题是,当我触发secodn ajax调用时,它不会返回到网页,直到返回第一个ajax调用。
我想知道这是正确的做法。另外我想知道,我面临的问题是由于ajax或web2py框架?
答案 0 :(得分:2)
默认情况下,会话文件在每个请求时都会被锁定,因此阻止来自同一客户端的新请求,直到完成上一个请求并解锁会话文件(请参阅here)。要避免此问题,您可以执行以下操作之一:
在您的应用代码中,当有Ajax功能请求进入时,请立即致电session.forget(response)
。这将解锁会话文件(因此阻止为该请求保存会话)。您可以在Ajax函数本身的开头包含此行,也可以将其包含在模型文件中:
if request.function in [list, of, ajax, functions]:
session.forget(response)
将会话存储在数据库或Cookie中,在这种情况下,不会锁定任何会话文件。
dict(web2py_disable_session=True)
。这将阻止框架自动连接该路由的会话(您仍然可以在应用程序代码中手动连接会话)。从理论上讲,这比第一个选项更有效,因为它可以防止会话文件被锁定(使用第一个选项,框架仍然最初锁定会话文件,然后您的应用程序代码稍后将其解锁)