【问题标题】:No Websocket connection without internet access (Ubuntu)没有互联网访问就没有 Websocket 连接(Ubuntu)
【发布时间】:2017-03-09 22:05:15
【问题描述】:

我有一个 Spring Boot 应用程序,它实现了一个 Websocket 服务器 (SockJS)。

只要托管应用程序的 Ubuntu 机器可以访问互联网,我就可以在本地网络上将客户端连接到该服务器。

2016-10-27 11:22:20.802 调试 9390 --- [nio-8085-exec-9] oacoyote.http11.Http11NioProtocol:套接字:[org.apache.tomcat.util.net.NioEndpoint$KeyAttachment @6cb31793:org.apache.tomcat.util.net.NioChannel@231c3b0c:java.nio.channels.SocketChannel[已连接本地=/192.168.1.104:8085 远程=/192.168.1.106:51946]],状态:[OPEN_READ ],说明:[已关闭]

2016-10-27 11:22:20.849 调试 9390 --- [io-8085-exec-10] d.f.util.ConnectivityCheckUtil:找到本地网络接口:wlp2s0 192.168.1.104 2016-10-27 11:22:20.850 调试 9390 --- [io-8085-exec-10] d.f.util.ConnectivityCheckUtil :您的 ip 是:192.168.1.104

2016-10-27 11:22:20.850 调试 9390 --- [io-8085-exec-10] d.f.i.v.b.i.w.s.BrokerWebsocketHandler:已连接 ... t0obkpdo 2016-10-27 11:22:20.851 信息 9390 --- [io-8085-exec-10] d.f.i.v.b.i.w.s.BrokerWebsocketHandler:websocketTextmessagesize = 1000000

2016-10-27 11:22:20.852 调试 9390 --- [io-8085-exec-10] oacoyote.http11.Http11NioProtocol:套接字:[org.apache.tomcat.util.net.NioEndpoint$KeyAttachment @1648207f:org.apache.tomcat.util.net.NioChannel@231c3b0c:java.nio.channels.SocketChannel[连接本地=192.168.1.104/192.168.1.104:8085远程=/192.168.1.106:51947]],状态:[OPEN_READ],说明:[UPGRADING]

2016-10-27 11:22:20.852 调试 9390 --- [io-8085-exec-10] oacoyote.http11.Http11NioProtocol:套接字:[org.apache.tomcat.util.net.NioEndpoint$KeyAttachment @1648207f:org.apache.tomcat.util.net.NioChannel@231c3b0c:java.nio.channels.SocketChannel[连接本地=192.168.1.104/192.168.1.104:8085远程=/192.168.1.106:51947]],状态:[OPEN_READ],说明:[UPGRADED]

当我拔下网络路由器上的 WAN 插头时,服务器会断开所有 WS 连接并且不允许新的连接。客户端会报错码2000 'All tr​​ansports failed'。

服务器会抛出这个错误:

2016-10-27 11:18:38.380 调试 9390 --- [nio-8085-exec-1] oacoyote.http11.Http11NioProtocol:套接字:[org.apache.tomcat.util.net.NioEndpoint$KeyAttachment @5526ea03:org.apache.tomcat.util.net.NioChannel@5f9486ff:java.nio.channels.SocketChannel[关闭]],状态:[OPEN_READ],状态:[CLOSED]

2016-10-27 11:18:51.396 调试 9390 --- [nio-8085-exec-2] oacoyote.http11.Http11NioProtocol:套接字:[org.apache.tomcat.util.net.NioEndpoint$KeyAttachment @d05fac1:org.apache.tomcat.util.net.NioChannel@5f9486ff:java.nio.channels.SocketChannel[连接本地=/192.168.1.104:8085远程=/192.168.1.106:51692]],状态:[OPEN_READ ],说明:[已关闭]

2016-10-27 11:19:01.437 调试 9390 --- [nio-8085-exec-6] oacoyote.http11.Http11NioProtocol:套接字:[org.apache.tomcat.util.net.NioEndpoint$KeyAttachment @7f10c230:org.apache.tomcat.util.net.NioChannel@5f9486ff:java.nio.channels.SocketChannel[已连接本地=192.168.1.104/192.168.1.104:8085 远程=/192.168.1.106:51693]],状态在:[OPEN_READ],说明:[CLOSED]

2016-10-27 11:19:02.141 DEBUG 9390 --- [nio-8085-exec-3] d.f.util.ConnectivityCheckUtil:找到本地网络接口:wlp2s0 192.168.1.104

2016-10-27 11:19:02.142 DEBUG 9390 --- [nio-8085-exec-3] d.f.util.ConnectivityCheckUtil :您的 ip 是:192.168.1.104

2016-10-27 11:19:02.144 调试 9390 --- [nio-8085-exec-3] d.f.i.v.b.i.w.s.BrokerWebsocketHandler:已连接 ... 2cbhftw3

2016-10-27 11:19:02.144 INFO 9390 --- [nio-8085-exec-3] d.f.i.v.b.i.w.s.BrokerWebsocketHandler:websocketTextmessagesize = 1000000

2016-10-27 11:19:02.147 调试 9390 --- [nio-8085-exec-3] d.f.i.v.b.i.w.s.BrokerWebsocketHandler :会话 2cbhftw3 由于 CloseStatus [code=1011, reason=null] 而关闭

2016-10-27 11:19:02.149 错误 9390 --- [nio-8085-exec-3] oaccC[.[.[/].[dispatcherServlet]:Servlet.service() 用于 servlet [dispatcherServlet]在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 org.springframework.web.socket.sockjs.SockJsException: Uncaught failure in SockJS request, uri=http://192.168.1.104:8085/websocket/data/421/2cbhftw3/xhr_streaming;嵌套异常是 org.springframework.web.socket.sockjs.SockJsTransportFailureException: 无法打开会话;嵌套异常是 org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe] 的根本原因

java.io.IOException: 损坏的管道

只要我重新插入 WAN 电缆并且路由器可以再次访问 Internet,WS 连接就会再次开始工作。我已经在 Netgear 和 TP-Link 的多个路由器上尝试过这个。

我已经尝试在ubuntu下手动设置网络接口设置,但是没有帮助。

知道是什么原因造成的吗?

BR 丹尼尔

【问题讨论】:

    标签: java spring websocket sockjs


    【解决方案1】:

    刚刚修复了在服务器的主机文件中添加一行的相同问题,有人认为:

    appsrv 192.168.1.15
    

    【讨论】:

      【解决方案2】:

      我好像你必须设置一个静态 IP,否则系统会尝试根据 Wire Shark 访问 DNS 发现服务,但它没有找到并且只是没有连接到预期的 IP。

      【讨论】:

        猜你喜欢
        • 2021-06-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        相关资源
        最近更新 更多