Websocket并发写入在java中不能100%工作

时间:2014-11-25 21:37:26

标签: java websocket queue tomcat7 bytebuffer

我有一个websocket服务器,我从java中的bytebuffers队列发送消息。以下是将队列中的消息发送到websocket服务器的代码,

protected void dequeue() throws InterruptedException, IOException
{
    ByteBuffer bbuf;
    while((bbuf = messageQueue.take()).get(0) != 0)
    {
        bbuf.position(bbuf.limit());
        System.out.println(bbuf);
        bbuf.flip();
        for(Session session : sessionList)
        {
            session.getBasicRemote().sendBinary(bbuf);
        }
    }
}

但是,当我尝试从队列中同时写入两条消息时,没有100%的可靠性。有时会发送第一条和第二条消息,有时只会发送第一条消息。我知道该消息正在发送,因为wireshark告诉我消息是100%的时间发送但是没有按照规定每次都收到。当我在websocket上进行并发写操作时,为什么会发生这种情况,接收端并不总是收到消息?我正在使用tomcat 7.0.53

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版本可能会解决问题,但尚未经过测试。