[英]Setting Servlet Context Initialization Parameters for Tomcat
我有一个Grails应用程序,它有一个简单的Websocket端点,如下所示:
@WebListener
@ServerEndpoint("/chatEndpoint/{chatId}")
public class WebsocketChatroomEndpoint implements ServletContextListener {
static ConfigObject config
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.servletContext
ServerContainer serverContainer = servletContext.getAttribute("javax.websocket.server.ServerContainer")
try {
ApplicationContext ctx = (ApplicationContext) servletContext.getAttribute(GA.APPLICATION_CONTEXT)
config = ctx.grailsApplication.config
serverContainer.defaultMaxSessionIdleTimeout = 0
} catch (IOException e) {
log.error(e.message, e)
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
@OnOpen
public void onOpen(Session userSession, @PathParam("chatId") String chatId) {
// Do some stuff
}
@OnMessage
public String onMessage(String message, Session userSession) throws IOException {
// Handle message received
}
@OnClose
public void onClose(Session userSession, CloseReason reason) {
// Handle close
}
@OnError
public void onError(Throwable t) {
// Handle error
}
}
端点工作正常,但我遇到的问题是,在部署到Tomcat 8时,空闲连接在60秒后断开连接。
Tomcat Websocket How-To声明可以通过设置以下servlet上下文初始化参数来更改此值: org.apache.tomcat.websocket.executorKeepAliveTimeSeconds
。
我在web.xml
文件中设置了这个参数,如下所示:
<context-param>
<param-name>org.apache.tomcat.websocket.executorKeepAliveTimeSeconds</param-name>
<param-value>1000</param-value>
</context-param>
并且,当我在Listener的contextInitialized
方法中访问该参数时,该值已正确设置。
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.servletContext
// Logs "1000"
log.debug(servletContext.getInitParameter("org.apache.tomcat.websocket.executorKeepAliveTimeSeconds"))
}
问题是,无论我将此值设置为什么,端点在60秒后仍会超时。 我已经尝试在Tomcat的context.xml
文件中设置值,以及在我的监听器中以编程方式设置它。 有没有人知道如何覆盖Tomcat的默认值为60秒?
我已经解决了这个问题,在对此进行故障排除时,我显然已经不在了。
我有与Tomcat的nginx反向代理连接。 Tomcat正确设置了值,但nginx中的proxy_read_timeout
默认为60秒。 在我的nginx站点配置中增加此值可解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.