簡體   English   中英

Socket.io 如何發送 JavaScript 對象

[英]Socket.io how to send JavaScript object

如何使用Socket.io從服務器向客戶端發送 JavaScript 對象? 我將 Socket.io 用作 WebSocket(使用.send()發送並監聽message事件)。 當我嘗試在服務器端做類似的事情時:

var myObject = {
    message: 'Hello World!'
}

socket.send(myObject);

在客戶端,我只得到這個字符串: [object Object]

您實際上需要發出一個事件:

 socket.emit('yourEvent', myObject);

如果您使用.send() ,您只是發送對象的字符串表示形式,這就是問題所在。 請注意,您可以使用.send() ,但您必須先對對象進行 JSON 編碼,然后在接收時對其進行解碼。

除非您有特殊原因,否則最好使用標准的 Socket.IO .emit()方法,因為它會為您完成所有這些工作。 這就是它的用途。

我剛剛使用一些較舊的示例遇到了這個問題。 這是我找到的答案: Migrating 0.6 to 0.7+ ,我在下面重現。


在 v0.6 中, socket.send會自動將像{a: 'b'}這樣的對象轉換為 JSON。 您將向客戶端發送數據:

socket.send({a: 'b'});

雖然這很酷,但它帶來了一個根本問題。 JSON不僅可以對對象進行編碼,還可以對字符串、數字等進行編碼,所以。 如果您明確聲明要傳遞 JSON,API 會更加清晰(因為編碼/解碼 JSON 會降低性能)。

在 v0.7 中,使用json標志:

socket.json.send({a: 'b'});

現在您還可以在瀏覽器和服務器之間發出和接收自定義事件:

socket.emit('my_event', {a: 'b'});

事件的參數會自動為您編碼為 JSON。

socket.send()不理解對象,但它喜歡 JSON。 您可以使用這種方式:

socket.send(JSON.stringify(myObject));

並使用JSON.parse(json)將 JSON 解析為 Object。

嘗試在您的服務器端使用它

socket.json.send({ your: 'data' });

以及客戶端的JSON.parse()方法。

在 socket.io V4.x 中,不需要使用JSON.stringify()

無需在對象上運行 JSON.stringify(),因為它會為您完成。

例如

// BAD
socket.emit("hello", JSON.stringify({ name: "John" }));

// GOOD
socket.emit("hello", { name: "John" });

有關此鏈接的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM