老师的源代码启动之后一旦刷新网页,或者关闭网页,就会抛异常,请问如何解决它?

来源:5-4 WebSocket连接业务的实现

tqz啊

2018-09-17 16:35

源代码虽然可以正常使用,发消息也没问题。但是启动网页后,一刷新网页或者关闭网页,就会抛异常:

*******************************************************************************************************************

目前我们不支持二进制消息

java.lang.RuntimeException: 【com.imooc.netty.websocket.MyWebSocketHandler】不支持消息

客户端与服务端连接关闭...

at com.imooc.netty.websocket.MyWebSocketHandler.handWebsocketFrame(MyWebSocketHandler.java:104)

at com.imooc.netty.websocket.MyWebSocketHandler.messageReceived(MyWebSocketHandler.java:80)

at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103)

at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:74)

at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:138)

at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:320)

at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:154)

at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:74)

at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:138)

at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:320)

at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)

at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:127)

at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:485)

at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:452)

at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:346)

at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:794)

at java.lang.Thread.run(Thread.java:745)

客户端与服务端连接开启...

****************************************************************************************************************************

请问一下异常的原因,以及如何解决异常。


写回答 关注

5回答

  • qq_慕UI0538935
    2019-03-20 10:43:45

    刚刚突然间发现,在判断是否为CloseWebSocketFrame的时候,如果是CloseWebSocketFrame并没有return,也就是程序将会继续往下运行,然后又判断如果不是TextWebSocketFrame自然就抛异常,所以正解应该是在判断CloseWebSocketFrame时,如果是,加上return即可。

  • qq_慕UI0538935
    2019-03-20 10:29:47

    这个地方判断二进制消息的方法是 如果不是 CloseWebSocketFrame PingWebSocketFrame 和 TextWebSocketFrame 就是 二进制消息,所以我猜测应该服务器刷新之类的操作会发送这么一个消息吧?

  • tqz啊
    2018-09-17 16:44:32
    我肯定知道老师写了抛异常的语句,所以才抛异常。但是不支持二进制是啥意思?
  • tqz啊
    2018-09-17 16:42:31

    我尝试着把代码修改为这样,然后就不报错了。但是。。。why??

    //判断是否是二进制消息
    if (!(frame instanceof TextWebSocketFrame)) {
        System.out.println("目前我们不支持二进制消息");
        ctx.channel().write(new PongWebSocketFrame(frame.content().retain()));
        return;
    }

    tqz啊

    刷新和关闭时客户端向服务端发送了什么呢?

    2018-09-17 16:47:38

    共 1 条回复 >

  • tqz啊
    2018-09-17 16:35:49
    还有为什么说不支持二进制?

Netty入门之WebSocket初体验

由浅入深了解Java高性能NIO通信首选框架——Netty

29324 学习 · 63 问题

查看课程

相似问题