2013-05-28 61 views
8

在JavaScript中,當你實例化的WebSocket:WebSocket可以即時切換其binaryType嗎?

ws = new WebSocket(url); 

你可以設置它的binaryType:

ws.binaryType = "blob"; 
// or 
ws.binaryType = "arraybuffer"; 

問: 我可以更改binaryType對飛?

例如,如果我想使用相同的WS實例來交織文本消息和二進制消息,我可以執行以下操作嗎?

ws = new WebSocket(url); 
// Send text 
ws.binaryType = "blob"; 
ws.send("this is text"); 
// Now send binary data 
ws.binaryType = "arraybuffer"; 
var ab = new ArrayBuffer(...); 
ws.send(ab); 

在閱讀W3C WebSocket的規範,我沒有看到任何明確地說,「你不能改變binaryType」,但網頁套接字的,我已經看到每一個例子/使用套binaryType一次,然後永遠不會改變它,這種表明它不能被改變。

任何信息,將不勝感激。

+0

僅僅因爲他們沒有每個場景作爲例子,並不意味着它不可能。你有沒有嘗試過自己? – Ian

+0

我建議試試看幾個不同的瀏覽器(和版本)。在這兩種情況下,我都認爲這不是一個好主意。我認爲大多數人都在使用具有連接回退/下降的抽象層,如socket.io和SignalR。因人而異。 – Tracker1

回答

13

您可以即時更改binaryType,但它隻影響接收到的消息的數據類型。要發送二進制數據,您必須發送一個blob或一個類型數組。如果您發送字符串,它將始終以字符串形式發送(並傳遞)。在有線協議中,消息可以是「文本」,即發送者將數據編碼爲字符串,也可以是「二進制」,這意味着消息包含原始編碼的字節流。 binaryType指示應該如何將原始數據傳遞給應用程序。

換句話說,當您設置binaryType時,意味着下次消息處理程序觸發接收二進制消息時,該事件數據將是binaryType類型。

相關問題