Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我使用http comet时,如何让tomcat发送tcp keepalive数据包_Java_Sockets_Tomcat_Tcp - Fatal编程技术网

Java 当我使用http comet时,如何让tomcat发送tcp keepalive数据包

Java 当我使用http comet时,如何让tomcat发送tcp keepalive数据包,java,sockets,tomcat,tcp,Java,Sockets,Tomcat,Tcp,我使用http comet使用以下代码进行网络聊天: public void event(CometEvent event) throws IOException, ServletException { HttpServletRequest request = event.getHttpServletRequest(); HttpServletResponse response = event.getHttpServletResponse();

我使用http comet使用以下代码进行网络聊天:

public void event(CometEvent event) throws IOException, ServletException {

            HttpServletRequest request = event.getHttpServletRequest();
            HttpServletResponse response = event.getHttpServletResponse();

            String regKey = request.getParameter("rk");
            if (regKey == null) {
                return;
            }

            if (event.getEventType() == CometEvent.EventType.BEGIN) {
                event.setTimeout(Integer.MAX_VALUE);
                System.out.println("Client [" + regKey + "] login...");
                synchronized (connections) {
                    connections.put(regKey, response);
                }
            } else if (event.getEventType() == CometEvent.EventType.ERROR) {
                System.out.println("Client [" + regKey + "] error...");
                synchronized (connections) {
                    connections.remove(regKey);
                }
                event.close();
            } else if (event.getEventType() == CometEvent.EventType.END) {
                System.out.println("Client [" + regKey + "] logout...");
                synchronized (connections) {
                    connections.remove(regKey);
                }
                event.close();
            } else if (event.getEventType() == CometEvent.EventType.READ) {
                System.out.println("Client [" + regKey + "] read...");
                synchronized (connections) {
                    connections.remove(regKey);
                }
                event.close();
            }
        }
如果浏览器或客户端正常关闭,我可以接收
CometEvent.EventType.END
事件, 但如果客户停电,我不会收到任何消息。我知道TCP正在等待网络恢复,但我想处理此事件,以便更新联机列表和其他重要内容(这意味着我必须处理此事件!!!。

我知道TCP keep-alive可以解决这个问题,但是tomcat默认情况下不向客户端发送keep-alive数据包,我如何解决这个问题呢
我相信tomcat可以发送TCP keep-alive数据包,但是如何配置tomcat?


谢谢

我不确定它是否能实现您想要的行为,但您可以通过在server.xml中为NIO HTTP连接器设置
socket.soKeepAlive=“true”
来启用TCP保持活动。如果您使用的是APR/native HTTP连接器,则没有启用TCK保持活动状态的配置选项。BIO HTTP连接器不支持Comet,因此,如果您想使用Comet启用TCP保持活动,则必须使用NIO HTTP连接器。

谢谢,我是中国人,所以我的英语很差。这个问题我已经解决了,但当我使用Tomcat7运行comet web应用程序时,我在浏览器中收到405,我应该更改什么配置文件?