簡體   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