【问题标题】:How to process onmessage event data from websocket如何处理来自 websocket 的 onmessage 事件数据
【发布时间】:2014-11-16 12:49:57
【问题描述】:

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

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

我收到了错误:

Uncaught SyntaxError: Unexpected token o (index):124socket.onmessage

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

编辑: 即使 event.data 仍然填充了正确的消息大小,我也会从以下行 /sometimes/ 中收到错误“加载资源失败:服务器响应状态为 404”。

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

感谢任何帮助,我希望这些信息是自包含的! 谢谢:)

【问题讨论】:

    标签: javascript json websocket vert.x


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 2021-07-26
      • 2018-10-15
      • 1970-01-01
      相关资源
      最近更新 更多