[英]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.