首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajac呼叫受阻- Web2py框架

Ajac呼叫受阻- Web2py框架
EN

Stack Overflow用户
提问于 2013-02-03 16:49:54
回答 1查看 226关注 0票数 0

我有一个在主机A上运行的web应用程序,它在另一个主机B上运行几个命令,我想在A上的网页上显示在B上运行的命令的输出,即我想在A上的网页上创建一种B的控制台的实况流。

为此,我将B控制台的输出重定向到A上的一个套接字,并将输出保存在A上的一个文件中。

我启动了一个ajax调用,它启动了从B开始的进程(使用web2py控制器)。这个ajax调用还处理B的控制台到A的套接字的重定向。

从网页中,我启动了另一个ajax,它读取存储套接字数据的文件。

现在我面临的问题是,当我触发secodn ajax调用时,它不会返回到网页,直到第一个ajax调用返回。

我想知道这是做这件事的正确方法。我还想知道,我面临的问题是由于ajax或web2py框架?

EN

回答 1

Stack Overflow用户

发布于 2013-02-03 22:20:28

默认情况下,会话文件在每次请求时都被锁定,因此来自同一客户端的新请求将被阻止,直到前一个请求完成并且会话文件被解锁(请参见here)。要避免此问题,可以执行以下操作之一:

  • 在你的应用代码中,当一个Ajax函数的请求进来时,立即调用session.forget(response)。这将解锁会话文件(从而阻止为该请求保存会话)。您可以将此行包含在Ajax函数本身的开头,也可以将其包含在模型文件的前面:

if request.function in list,of,ajax,functions:数据库或cookies中的session.forget(response)

  • Store会话,在这种情况下,将没有要锁定的会话文件。

  • 如果您未使用基于参数的重写系统,则可以使用基于模式的重写系统禁用特定路由的自动会话连接。在routes_in中,您可以指定一个三元组,而不是指定标准的二元组。元组的前两个元素和往常一样(传入模式和重写模式),第三个元素应该是dict(web2py_disable_session=True)。这将阻止框架自动连接该路由的会话(您仍然可以在应用程序代码中手动连接会话)。从理论上讲,这比第一种方法更有效,因为它完全防止了会话文件被锁定(使用第一种方法,框架最初仍然锁定会话文件,然后您的应用程序代码稍后将其解锁)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14670867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档