« 続・JavaScriptの顔認識ライブラリをチューニングしたら実用レベルになったという話(データ編) | メイン | WebRTCとWeb Audio APIでテルミンみたいなものを作ってみた - Facemin - »

WebSocket APIの仕様が変更されたようです

昨年末にCandidate RecommendationsとなったWebSocket APIですが、今回はLast Call Working Draftと書かれています。
W3Cの承認プロセスに詳しくないのでよくわかりませんが...。

それぞれの仕様は以下から読めます。
簡単に比較してみましたが、大きな変更はバイナリの扱いです。

これまでは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);
新しい仕様では、以下のようになるようです。
var ary = new Int8Array(length);
/*
 ...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);
新しいAPIの実装はまだ出てませんが、近いうちに両仕様が混在しそうです。
両方の仕様に対応したコードを模索する必要がありそうですね。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド