如何处理来自websocket的onmessage事件数据

时间:2014-11-16 12:49:58

标签: javascript json websocket vert.x

我正在设置一个vert.x项目,我在其中通过websocket从我的基于Java的服务器向javascript客户端发送一段JSON。

发送JSON的Vert.x服务器:

        vertx.eventBus().send("mongodb-persistor", collectionsQuery, new Handler<Message<JsonObject>>() {

            @Override
            public void handle(Message<JsonObject> data) {
                container.logger().info(data.body().encodePrettily());
                ws.write(new Buffer(data.body().toString()));
            }

        });

在控制台上输出的数据:

  

{     &#34;集合&#34; :[&#34; AAPL&#34;,&#34; AZN&#34;,&#34; GOOG&#34;,&#34; YHOO&#34;,&#34; system.indexes&#34; ]     &#34;状态&#34; :&#34; ok&#34;   }

当我在客户端收到此邮件时:

    socket.onmessage = function(event) {
    alert("Received data from websocket: " + event.data);
    var x = JSON.parse(event.data);
};

我收到错误:

  

未捕获的SyntaxError:意外的令牌o(索引):124socket.onmessage

我已经阅读了,好像是因为JSON已经被解析了。因此,如果我不解析JSON,我该如何实际访问我的数据?如果我只输出event.data作为字符串,我得到的只是类型和大小,而不是控制台上记录的数据。

编辑: 我也收到错误&#34;无法加载资源:服务器响应状态404&#34;关闭以下行/有时/,即使event.data仍然填充了正确的邮件大小。

  

警告(&#34;从websocket收到的数据:&#34; + event.data);

感谢任何帮助,我希望这些信息足够自足! 谢谢:))

1 个答案:

答案 0 :(得分:0)

在vert.x中结果我不应该返回包含在Buffer中的JSON。

相反,我使用方法writeTextFrame

        vertx.eventBus().send("mongodb-persistor", collectionsQuery, new Handler<Message<JsonObject>>() {

        @Override
        public void handle(Message<JsonObject> data) {
            container.logger().info(data.body().toString());
            ws.writeTextFrame(data.body().encode());
        }

    });