2013-05-28 2 views
8

В JavaScript, когда экземпляр WebSocket:Может ли WebSocket переключать свой бинарный тип на лету?

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», но каждый пример/использование WebSocket, что я видел наборы binaryType один раз, то никогда не меняется это, что sorta предполагает, что его нельзя изменить.

Любая информация будет оценена по достоинству.

+0

Просто потому, что у них нет каждого сценария в качестве примера, это не значит, что это невозможно. Вы сами что-то пробовали? – Ian

+0

Я бы предложил попробовать несколько разных браузеров (и версий), чтобы их увидеть. Я не думаю, что это, вероятно, хорошая идея в любом случае. Я действительно думаю, что большинство людей используют слои абстракции, у которых есть резервные связи/fallforwards, такие как socket.io и SignalR. YMMV. – Tracker1

ответ

13

Вы можете изменить бинарный тип на лету, но это влияет только на тип данных полученных сообщений. Чтобы отправить двоичные данные, вы должны либо отправить blob, либо типизированный массив. Если вы отправляете строку, она всегда будет отправлена ​​(и доставлена) в виде строки. В проводном протоколе сообщение может быть либо «текстом», означающим, что отправитель отправил данные, закодированные в виде строки, или он может быть «двоичным», что означает, что сообщение содержит необработанный закодированный поток байтов. BinaryType указывает, как эти необработанные данные должны быть доставлены в приложение.

Другими словами, когда вы устанавливаете binaryType, это означает, что в следующий раз, когда обработчик сообщения начнет получать двоичное сообщение, данные этого события будут иметь тип binaryType.

Смежные вопросы