繁体   English   中英

如何处理websocket的onmessage事件数据

[英]How to process onmessage event data from websocket

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

Vert.x服务器发送JSON:

        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()));
            }

        });

在控制台上输出的数据正在发送:

{“ collections”:[“ AAPL”,“ AZN”,“ GOOG”,“ YHOO”,“ system.indexes”],“ status”:“ ok”}

当我在客户端收到此消息时:

    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输出为字符串,那么我得到的只是类型和大小,而不是控制台上记录的数据。

编辑:即使在event.data仍使用正确的消息大小填充的情况下,我也从以下行/ sometimes /下收到错误“无法加载资源:服务器以状态404响应”。

alert(“从websocket接收的数据:” + event.data);

感谢您的帮助,我希望这些信息能够自我包含! 谢谢 :)

结果在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());
        }

    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM