WebSocket 預設以文字幀(UTF-8)傳輸資料。若伺服器發送二進位幀,前端必須明確設定 binaryType 屬性,並在 onmessage 中正確處理 Blob 或 ArrayBuffer 物件,否則 event.data 可能為空或無法解析。
var ws = new WebSocket("ws://example.com/socket");
ws.binaryType = "arraybuffer"; // 或 "blob"
// 接收處理
ws.onmessage = function(event) {
if (event.data instanceof ArrayBuffer) {
var bytes = new Uint8Array(event.data);
// 處理位元組陣列,例如解析協定封包
console.log("收到二進位資料,長度:" + bytes.length);
} else if (typeof event.data === "string") {
console.log("收到文字資料:" + event.data);
}
};
binaryType,預設為 "blob",若直接 alert(event.data) 會顯示 [object Blob],誤以為沒收到資料。JSON.parse 解析二進位資料,會拋錯。WebSocketSession.sendMessage(new BinaryMessage(byteBuffer))。ws.send(buffer, { binary: true })。conn.WriteMessage(websocket.BinaryMessage, data)。console.log(event.data, event.data.constructor.name) 觀察實際型別。正確設定 binaryType 並區分幀型別處理,是 WebSocket 穩定收發二進位資料的關鍵。