2013-05-28 12 views
8

W JavaScript, gdy instancji websocket:Czy WebSocket może zmienić typ swojego binaryType w locie?

ws = new WebSocket(url); 

można ustawić to binaryType:

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

Pytanie: mogę zmienić binaryType w locie?

Na przykład, jeśli chcę użyć tej samej instancji WS do przeplatania zarówno wiadomości tekstowych, jak i binarnych, czy mogę wykonać następujące czynności?

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); 

Czytając specyfikację W3C websocket, nie widzę niczego, co wyraźnie mówi „nie można zmienić binaryType”, ale każdy przykład/Wykorzystanie websocket że widziałem zestawy binaryType ani razu potem zmienia to, co sugeruje, że nie można go zmienić.

Wszelkie informacje są mile widziane.

+0

To, że nie każdy scenariusz jest przykładowy, nie oznacza, że ​​nie jest możliwe. Próbowałeś czegoś samemu? – Ian

+0

Proponuję wypróbować kilka różnych przeglądarek (i wersji), aby zobaczyć. Nie sądzę, żeby w obu przypadkach był to dobry pomysł. Myślę, że większość ludzi używa warstw abstrakcji, które mają awarie połączenia/fallforwards, takie jak socket.io i SignalR. ymmv. – Tracker1

Odpowiedz

13

Możesz zmienić parametr binaryType w locie, ale ma on wpływ tylko na typ danych odbieranych wiadomości. Aby wysłać dane binarne, musisz wysłać blob lub tablicę wpisaną. Jeśli wyślesz ciąg, zawsze będzie on wysyłany (i dostarczany) jako ciąg znaków. W protokole przewodowym komunikat może być albo "tekstem", co oznacza, że ​​nadawca wysłał dane zakodowane jako ciąg, albo może być "binarny", co oznacza, że ​​wiadomość zawiera surowy zakodowany strumień bajtów. Typ binaryType wskazuje sposób dostarczania nieprzetworzonych danych do aplikacji.

Innymi słowy, po ustawieniu binaryType oznacza to, że przy następnym uruchomieniu obsługi komunikatu dla otrzymania binarnej wiadomości, dane tego zdarzenia będą miały typ binaryType.

Powiązane problemy