怎么捕获、处理关闭浏览器导致的websocket后台报错~!

yangsen251024 2018-03-03 07:26:47
问题描述:
登录成功后,跳转到系统主页,此时根据用户ID打开一个websocket,这时如果直接关闭浏览器,后台会报如下错误,请教各位,有什么办法解决、处理没有:

java.io.IOException: java.util.concurrent.ExecutionException: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:286)
at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:572)
at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:495)
at org.apache.tomcat.websocket.WsFrameBase.processDataControl(WsFrameBase.java:348)
at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:290)
at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:131)
at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:67)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler$WsReadListener.onDataAvailable(WsHttpUpgradeHandler.java:204)
at org.apache.coyote.http11.upgrade.AbstractServletInputStream.onDataAvailable(AbstractServletInputStream.java:203)
at org.apache.coyote.http11.upgrade.AbstractProcessor.upgradeDispatch(AbstractProcessor.java:93)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:635)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.ExecutionException: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.tomcat.websocket.FutureToSendHandler.get(FutureToSendHandler.java:120)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:281)
... 15 more
Caused by: java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.upgrade.BioServletOutputStream.doWrite(BioServletOutputStream.java:38)
at org.apache.coyote.http11.upgrade.AbstractServletOutputStream.writeInternal(AbstractServletOutputStream.java:153)
at org.apache.coyote.http11.upgrade.AbstractServletOutputStream.write(AbstractServletOutputStream.java:121)
at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.onWritePossible(WsRemoteEndpointImplServer.java:94)
at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:81)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:456)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(WsRemoteEndpointImplBase.java:344)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:276)
... 15 more
...全文
1232 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
习惯了想你 2019-11-27
  • 打赏
  • 举报
回复
判断一下 session.isOpen() ,然后在执行操作
yangsen251024 2018-03-04
  • 打赏
  • 举报
回复
引用 2 楼 yangsen251024 的回复:
[quote=引用 1 楼 kampoo 的回复:]
直接捕获异常忽略吧,毕竟客户端的类型毕竟多,有的websocket可能不够 graceful (优雅)~ 服务器端要假定客户端都是 “傻客户端”~


这个异常怎么捕获?[/quote]

引用 2 楼 yangsen251024 的回复:
[quote=引用 1 楼 kampoo 的回复:]
直接捕获异常忽略吧,毕竟客户端的类型毕竟多,有的websocket可能不够 graceful (优雅)~ 服务器端要假定客户端都是 “傻客户端”~


这个异常怎么捕获?[/quote]



感谢!
yangsen251024 2018-03-04
  • 打赏
  • 举报
回复
引用 1 楼 kampoo 的回复:
直接捕获异常忽略吧,毕竟客户端的类型毕竟多,有的websocket可能不够 graceful (优雅)~ 服务器端要假定客户端都是 “傻客户端”~
这个异常怎么捕获?
kampoo 2018-03-04
  • 打赏
  • 举报
回复
直接捕获异常忽略吧,毕竟客户端的类型毕竟多,有的websocket可能不够 graceful (优雅)~ 服务器端要假定客户端都是 “傻客户端”~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧