收到新消息的开始,但上一条消息未完成

时间:2015-04-15 16:06:01

标签: java javascript websocket

我的基于Web的WebSocket客户端以这种方式连接到我的Java服务器:

this.ws = new WebSocket(this.url);
  this.ws.onmessage = m => {
    let data;
    try {
      data = JSON.parse(m.data);
    } catch (e) {
      // Log error
      return;
    }
    doALotOfStuff(data);
  };

但有时我在Chrome中遇到此错误:

  

与'myServerUrl'的WebSocket连接失败:收到新的开始   消息,但上一条消息未完成。

我找到了related source code in Chromium和一些关于它的讨论,但这完全是关于延续帧和OpCode,比我从我所理解的那样访问的API要低得多。

这是否意味着我在处理前一个消息时收到了消息?意思是我必须调用setTimeout(...,0)来异步处理我的所有消息?但是那么每个人都应该这样做,为什么浏览器不处理这个呢?

我在Firefox中有类似的错误:

  

页面加载时,myServerUrl的连接中断。

我猜这更令人困惑,因为我没有重新加载页面,它发生在websocket会话的中间。

所以我猜它可能不是Chromium故障但是我该如何处理呢?

或者我在发送邮件时做错了什么?我使用javax-websocket-api-1.0,我只是这样做:

try (Writer writer = session.getBasicRemote().getSendWriter()) {
  JacksonSerializer.serialize(object, writer);
} catch (final SerializerException | IOException e) {
  throw ...;
}

每当我在其中写入一个对象时我都会关闭作者,所以这对我来说很好。

1 个答案:

答案 0 :(得分:0)

这确实是由于服务器代码中的错误造成的。我引用的代码是正确的但不是线程安全的,所以我同时写入同一个会话。我通过在会话上同步来修复它。