Tomcat websocket客户端框架

时间:2014-12-01 18:09:04

标签: java tomcat java-ee websocket tomcat7

我有以下代码在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。

1 个答案:

答案 0 :(得分:0)

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