【问题标题】:Increase timeout of GWT Front-End while invoking AsyncCallback在调用 AsyncCallback 时增加 GWT 前端的超时
【发布时间】:2015-11-05 05:40:31
【问题描述】:

我有一个基于 GWT 的 UI,它连接到 Web 服务(第 3 方)以提交一些请求。当请求很大时(就像真的很大),应用程序过去常常超时,因为请求的第 3 方总执行时间是 72 秒,而我们的连接超时设置为 60 秒,所以在响应来自第 3 方之前, out 应用程序将超时。所以我将 ServiceClient 超时时间从 60 秒 增加到 200 秒。使用 AsynCallback 提交请求。这在我的本地 IBM WebSphere 服务器(DEV 环境)中效果很好。

问题是,当我尝试在测试环境中提交请求时,UI 在 60 秒 内超时,并且用户显示内部服务器错误,但在后台,AsynCallBack 仍会执行,并且在收到响应后(72 秒)也会执行发布提交活动。

如何在 AsynCallback 返回响应(200 秒)之前暂停 UI 超时?

我找不到为 GWT UI 设置的任何超时设置。

【问题讨论】:

  • 什么是ServiceClient?以及如何以及在哪里设置超时?
  • 我正在使用 Axis2 服务客户端。我在此设置超时:- stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(200000);

标签: java gwt timeout asynccallback


【解决方案1】:

回调超时很可能由服务器处理。您需要修改服务器的连接器以延长那里的超时时间。

如果您使用的是 tomcat,您的问题是连接器的默认超时为 60 秒。您可以使用 connectionTimeout 选项对其进行修改。

Tomcat configurations

如果您正在对服务器进行长时间运行的调用。您可能希望考虑使用彗星/推送事件来做某事,以便在工作完成时通知客户端。过去,我为此使用了几个过程。 Atmosphere 是一个优秀的库,支持 websockets 和 http 推送。我还使用了带有 websockets 和 STOMP 的队列来将事件推送到 Web 客户端。如果您要在生产中使用它,很多时候这是正确的方法。如果你把它放在代理或负载均衡器后面,这个问题肯定会出现。

【讨论】:

  • 感谢您的回复。目前无法实现外部库。我正在使用 IBM WebSphere。我们实际上在代理/负载平衡器后面。你能解释一下这怎么可能是个问题。此外,是否可以更改任何 WebSphere 设置来避免这种情况?
  • 导致问题的可能不是 WebSphere。问题很可能出在代理/负载均衡器正在终止您的连接。代理/负载均衡器将在几秒钟后关闭连接的原因是为了释放资源。这样您就不会耗尽负载均衡器/代理的连接数和/或内存。这就是 lb 关闭连接以便其他客户端仍然可以访问资源的原因。如果您的请求需要超过 40 秒,您需要使用异步推送服务来提醒客户端长时间运行的进程
  • 已完成。如果您使用的是 websockets 而不是普通的 http 传输,您也可以避免这种情况。
【解决方案2】:

最后通过更改WebSphere关联集群的Web ServerPlug-in Properties中的read/write timeout值解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多