当前位置: 首页 > 知识库问答 >
问题:

Play Framework 1.2.5粘性错误:324未收到数据

益和雅
2023-03-14

我有一个在PlayFramework1.2.5中运行的多用户应用程序

有时,用户会开始收到324个特定URL的错误,该URL在几分钟前就为他们工作过。(324=Chrome中未接收到数据,服务器在IE8中关闭了连接)。一旦收到此消息,他们将继续收到错误。

我可以看到请求到达运行Play Framework的计算机(通过Wireshark),但请求似乎没有到达Play控制器。(作为控制器中第一步的调试和跟踪消息不会输出到日志)。我看到两个不同的控制器出现了问题,它可能会影响更多。

清除浏览器缓存、历史记录、重新启动客户端、重新启动Play、重新启动服务器似乎都没有什么区别。

其他浏览器可以成功访问“损坏”的URL。“损坏”的客户端可以访问同一应用程序中的其他 URL。

有谁知道:1)知道为什么会发生这种情况,或者已经看到了同样的问题,或者2)有人知道在响应链中的哪个位置可能会爆炸或发送324?2)我如何更深入地跟踪出了什么问题(例如,我可以跟踪Netty访问吗?

我到处搜索了类似的解决方案问题,只能在路由文件中找到一些导致类似324错误的错误参考,但这些似乎都是一致的、可重复的,并且与Play2.x有关。但是,坏的路由可能会导致324错误,这一事实意味着我想更详细地了解路由器对这些中断的请求所做的工作。

非常感谢任何帮助!这让我发疯了!

共有1个答案

欧阳子石
2023-03-14

好吧,以防其他人看到这个令人恼火的问题...我已经找到了原因:

Netty 3.2.4-FINAL 中的一个已知问题意味着,如果请求包含 8053 字节或更大的 cookie,它将以 324 响应进行回复。这在 Play 框架社区中是众所周知的(见 http://play.lighthouseapp.com/projects/57987/tickets/1618-long-cookies-with-double-quote-values-make-play-fail-before-the-request-is-handled)。您会在那里的评论跟踪中注意到,双引号问题已修复,但大小问题仍然存在。

那么,我是如何生成这么大的cookie的呢?答案:JQuery Datatable。这个奇妙的UI元素(不,真的)有一个名为“bStateSave”的设置,允许您将表的状态(排序、过滤等)保存在cookie中,以改善用户体验。数据表的cookie大约为900字节。然而,Datatable在命名此cookie时使用URL的路径部分,因此对于应用程序中的每个不同URL路径,您都会得到一个新的cookie。现在,只需在混合中添加一个RESTful风格的URL,例如/item/show/34(其中34是一个对象id),然后,为您查看的每个项目添加一个900字节的cookie。这很快就突破了8K的限制。

覆盖datatables状态cookie的命名并不简单,但是非常简单。

首先,将以下配置添加到数据表中

"bStateSave": true,
"fnStateSave": function(oSettings, oData) { save_dt_view(oSettings, oData); },
"fnStateLoad": function(oSettings) { return load_dt_view(oSettings); },

然后,只需使用您自己的不太精确的cookie名称提供存储和检索状态的javascript函数:

function save_dt_view (oSettings, oData) {
    $.cookie('DataTables_myCookie', JSON.stringify(oData));
}
function load_dt_view (oSettings) {
  return JSON.parse( $.cookie('DataTables_myCookie') );
}

感谢bennybenben在这篇文章中为我提供的代码样本。

 类似资料:
  • 执行任务:[: app: assembleDebug] 任务:应用:预构建最新任务:应用:预构建最新任务:应用:预构建最新任务:应用:CompiledBugAidl无源任务:应用:checkDebugManifest最新任务:应用:CompiledBugRenderScript无源任务:应用:GeneratedBugConfig Build最新任务:应用:PrepareNetjar最新任务:应用:

  • 问题内容: 我写了一个文件 并如下 我已经启动了redis服务器,也已经启动了celery服务器。但是当我运行task.py时,出现以下错误: 可能的原因是什么 问题答案: 嘿,我解决了我添加的一件事 在我的档案中,我获得了成功。

  • 我的主代码我正在尝试制作一个不和谐的机器人我得到了这个错误类型错误无法读取'execute'的属性未定义我有每一个解决方案,但它仍然有一些错误,如果有人解决它将不胜感激。我试图使一个简单的迪斯科机器人,但代码不仅工作请hlep。 我的踢码

  • 我已经用java设置了一个cucumber项目,在我的EclipseIDE中,我可以直接运行我的功能文件,测试将完成。然而,当我将它们作为JUnit测试运行时,它们不会运行,在控制台中它们显示为 如果我双击JUnit选项卡中的步骤,我会得到以下消息 “在所选项目中找不到测试类” 我的测试跑步者班是这样的, 我的文件夹结构如下所示 JUnit似乎忽略了我的胶水代码。即使我输入了一个无效的路径,它也不

  • 问题内容: 我正在使用Spring Security运行NTLM,出现以下错误 org.springframework.beans.factory.NoSuchBeanDefinitionException:未定义名为“ springSecurityFilterChain”的bean 如何解决此错误? 我在web.xml中定义了以下内容 更新1 我解决了这个错误,现在我得到了 org.spring

  • 我想知道粘性和非粘性会议之间的区别。我从网上读到的: 粘滞:只有一个会话对象将在那里。 非粘性会话:每个服务器节点的会话对象