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

How to process onmessage event data from websocket

本文关键字:websocket 消息 事件 数据 何处理 处理      更新时间:2023-09-26

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

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

控制台上输出的数据:

{ "集合" : [ "AAPL", "AZN", "GOOG", "YHOO", "system.indexes" ], "状态" : "确定" }

当我在客户端上收到这个时:

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

我收到错误:

未捕获的语法错误:意外的标记 o(索引):124socket.onmessage

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

编辑:我还收到以下行/sometimes/的错误"无法加载资源:服务器以状态404响应",即使event.data仍然填充了正确的消息大小。

alert("从 websocket 接收数据:"+ event.data);

任何帮助都值得赞赏,我希望这些信息足够独立!谢谢:)

事实证明,

在 vert.x 中,我不应该返回包装在缓冲区中的 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());
        }
    });