java - Tomcat Websocket客户端框架

我有以下代码在Java中作为websocket的clientendpoint执行

   protected void dequeue() throws InterruptedException, IOException
    {
        ByteBuffer bbuf;
        System.out.println("start");
        while((bbuf = messageQueue.take()).get(0) != 0)
        {
            bbuf.position(bbuf.limit());
            if(bbuf.get(0)== 0)
                System.out.println("here");
            bbuf.flip();
            for(Session session : sessionList)
            {
                //Thread.sleep(10000);
                if(!session.isOpen())
                    break;
                session.getBasicRemote().sendBinary(bbuf);
            }
        }
        System.out.println("end");
    }


将注释掉的 Thread.sleep()放回代码中时,代码可以正常工作。但是,当代码中不包含 Thread.sleep()时,有时可以写入Websocket,而有时在写入第一条消息并给出以下原因后,又调用 @onClose

CloseReason: code [1002], reason [The client frame set the reserved bits to [7] which was not supported by this endpoint]

其中 [7]有时为1,2等。我还无法真正找到导致这种情况发生的任何原因,有人碰巧对发生的事情有任何见解吗?值得注意的是,我正在使用 tomcat 7.0.53托管websocket的ServerSide,并使用HTTPS而不是HTTP。

最佳答案

这是由于tomcat中存在以下错误,将https://issues.apache.org/bugzilla/show_bug.cgi?id=57318#c1更新为apache tomcat 7.0.57将解决此问题。将Apache tomcat版本更新为大于7.0.53可能会解决此问题,但尚未进行测试。