昨年末にCandidate RecommendationsとなったWebSocket APIですが、今回はLast Call Working Draftと書かれています。
W3Cの承認プロセスに詳しくないのでよくわかりませんが...。
それぞれの仕様は以下から読めます。
それぞれの仕様は以下から読めます。
簡単に比較してみましたが、大きな変更はバイナリの扱いです。
これまではWebSocket APIで送信できるデータはDOMStringとArrayBufferとBlobの3つでしたが、新しい仕様ではDOMStringとArrayBufferViewとBlobになっています。
ArrayBufferViewについては以下のURLを参照してください。
これまではWebSocket APIで送信できるデータはDOMStringとArrayBufferとBlobの3つでしたが、新しい仕様ではDOMStringとArrayBufferViewとBlobになっています。
ArrayBufferViewについては以下のURLを参照してください。
例えば、ArrayBufferViewのサブクラスInt8Arrayを送信する場合、以下のようにする必要がありました。
var ary = new Int8Array(length);
/*
...aryの処理...
*/
// bufferプロパティからArrayBufferを取得し送信
ws.send(ary.buffer);
/*
...aryの処理...
*/
// bufferプロパティからArrayBufferを取得し送信
ws.send(ary.buffer);
新しい仕様では、以下のようになるようです。
var ary = new Int8Array(length);
/*
...aryの処理...
*/
// Int8ArrayはArrayBufferViewのサブクラスなのでそのまま送信可能?
ws.send(ary);
/*
...aryの処理...
*/
// Int8ArrayはArrayBufferViewのサブクラスなのでそのまま送信可能?
ws.send(ary);
受信側は、ArrayBufferのまま変更はないようです。
var handler = function(e) {
// ArrayBufferを意図した型に変更
// ArrayBuffer => Int8Array
var ary = new Int8Array(e.data);
/*
...aryの処理...
*/
}
var ws = new WebSocket(/*url*/);
ws.binaryType = "arraybuffer";
ws addEventListener("message", handler, false);
// ArrayBufferを意図した型に変更
// ArrayBuffer => Int8Array
var ary = new Int8Array(e.data);
/*
...aryの処理...
*/
}
var ws = new WebSocket(/*url*/);
ws.binaryType = "arraybuffer";
ws addEventListener("message", handler, false);
新しいAPIの実装はまだ出てませんが、近いうちに両仕様が混在しそうです。
両方の仕様に対応したコードを模索する必要がありそうですね。
両方の仕様に対応したコードを模索する必要がありそうですね。