2013-03-29 27 views
2

我使用ExtJS的+的cometd在UI上侧和Spring +码头作为后端为我的应用程序。用户使用spring身份验证管理器(j_spring_security_check)进行身份验证。 正常的http请求发生在特定的url模式(/ myapp)上,并且cometd通信发生在不同的url模式(/ cometd)上。的cometd长轮询决策会议,永不超时

我有一个会话超时值在服务器上设置为30分钟。一旦用户登录,CometD活动就会开始(如握手,连接等)。我有Bayex运输彗星作为WebSocket和长轮询使用。对于不支持WebSocket的浏览器,CometD通信使用长轮询机制。

问题是因为来自客户端的cometd长轮询,该段时间在服务器上了柜台总是能够从时长的cometd轮询心脏的跳动到达复位。由于这个原因,会话永远不会在服务器上超时。

有没有办法避免会议时间复位超时值的会话如果请求来自于一个特定的URL(在我的情况下的cometd URL)。

此外,有可能的,如果我可以除去的cometd发送到服务器的HTTP报头内的JSSIONID参数。可能如果我可以从http头中删除JSESSIONID,那么服务器将不会重置该会话的超时计数器。

感谢,
的Brij

回答

1

这已被要求在的cometd邮件列表,请参阅 https://groups.google.com/forum/?fromgroups=#!topic/cometd-users/xoTRl3lL9_o

投票http://bugs.cometd.org/browse/COMETD-416,可以列入的cometd 2.6.0。

+0

上面的链接提供了关于断开的情况下,有一个特定的时间间隔的cometd客户端和服务器的cometd之间没有活动的cometd会话的一些信息。我的要求是避免http会话超时计时器由于cometD长轮询连接请求而重置。所以,我的http会话超时将优先,当它超时时,我也可以断开cometD连接。当http会话超时时,我已经有了断开cometD连接的逻辑。但问题是由于cometD轮询,HTTP会话不会超时。 – brij

+0

@brij完全是因为CometD继续长时间轮询,你的HTTP会话永远不会空闲。 – sbordet

+0

@brij完全是因为CometD继续长时间轮询,您的HTTP会话永远不会空闲。如果您有办法检测CometD闲置(排除长轮询),则可以断开CometD会话,然后让HTTP会话超时。我不知道有什么标准方法可以避免每次servlet容器收到请求时重置HTTP会话空闲计时器。您不应该在CometD应用程序中使用HTTP会话:如果将来您的CometD传输将成为WebSocket,那么您已使用HTTP会话将应用程序绑定到HTTP,并且将很难使用WebSocket。 – sbordet