Big Bird 2019-04-29 14:59 采纳率: 0%
浏览 2228
已结题

入坑netty但是发现坑好多啊

我这个加了心跳机制,发现这么一个问题,客户端发送给服务器端的心跳信息如果不加入\n,发现无法触发
服务器端的read0那个方法,但是一旦加上,就会报错
DefaultFullHttpRequest(decodeResult: failure(java.lang.IllegalArgumentException: invalid version format: BODY=NULL]), version: HTTP/1.0, content: UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 0, cap: 0))
GET /bad-request HTTP/1.0
贴上代码

protected void channelRead0(ChannelHandlerContext ctx, Object o) throws Exception {
        System.out.println(o);
        if(o instanceof FullHttpRequest){
            //握手阶段  传统http协议
            dealHandshake(ctx, (FullHttpRequest) o);
        }else if(o instanceof TextWebSocketFrame){
            //文本消息处理
            dealTextWebSocketFrame(ctx, (TextWebSocketFrame) o);
        }else if(o instanceof PingWebSocketFrame){
            System.out.println("jin-------------");
            //心跳消息处理
        }else if(o instanceof CloseWebSocketFrame){
            //断开处理
            try {
                dealCloseWebSocketFrame(ctx);
            }catch (Exception e){
                e.printStackTrace();
            }

        }`

这个是服务器端的代码,上面那个报错信息就是o打印出来的

protected void sendPingMsg(ChannelHandlerContext ctx){
        Model model = new Model();

        model.setType(TypeData.PING);

        ctx.channel().writeAndFlush(model+"\n");

        heartbeatCount++;

        System.out.println(name + " send ping msg to " + ctx.channel().remoteAddress() + "count :" + heartbeatCount);
    }

这个是发送的心跳信息,加上了\n 因为网上说必须加这个,没有结束符不然无法识别

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-04-29 15:40
    关注
    评论

报告相同问题?