WebSocket - ソケット通信
WebSocketは、Webサーバーとクライアント間でのソケット通信をするための機能を備えたインターフェイスです。
概要
- 名前
- WebSocket
- 継承
- EventTarget
- WebSocket
- IDL
[Constructor(USVString url, optional (DOMString or sequence<DOMString>) protocols = []), Exposed=(Window,Worker)] interface WebSocket : EventTarget { readonly attribute USVString url; // ready state const unsigned short CONNECTING = 0; const unsigned short OPEN = 1; const unsigned short CLOSING = 2; const unsigned short CLOSED = 3; readonly attribute unsigned short readyState; readonly attribute unsigned long long bufferedAmount; // networking attribute EventHandler onopen; attribute EventHandler onerror; attribute EventHandler onclose; readonly attribute DOMString extensions; readonly attribute DOMString protocol; void close(optional [Clamp] unsigned short code, optional USVString reason); // messaging attribute EventHandler onmessage; attribute BinaryType binaryType; void send(USVString data); void send(Blob data); void send(ArrayBuffer data); void send(ArrayBufferView data); }; typedef EventHandlerNonNull? EventHandler; enum BinaryType { "blob", "arraybuffer" }; typedef (Int8Array or Int16Array or Int32Array or Uint8Array or Uint16Array or Uint32Array or Uint8ClampedArray or Float32Array or Float64Array or DataView) ArrayBufferView; callback EventHandlerNonNull = any (Event event);
- 仕様書
- https://html.spec.whatwg.org/multipage/web-sockets.html#websocket
チュートリアル
WebSocketのインスタンスは下記の通り、作成できます。引数に接続先のurlを指定して下さい。インスタンスの作成時にソケット通信が開始されます。当サイトでは、WebSocketを試したい方のために、こちらでサーバーを稼働させています。
// インスタンスの作成 (ソケット通信の開始)
var ws = new WebSocket( "wss://socket.syncer.jp/connect" ) ;
// メッセージの送信
ws.send( "Hello!" ) ;
// メッセージの受信
ws.onmessage = function ( event ) {
var message = event.data ; // 受信した内容
}
ソケット通信のデモです。このページを別ウィンドウで新しく開いて、2つのウィンドウで同時に接続してみましょう。ログをリアルタイムで共有して、チャットになります。
<!-- このコードは編集できます。 -->
<!DOCTYPE html>
<html>
<head>
<style>
div#result { white-space: pre-wrap ; }
input { width: 40% ; font-size: 16px ; }
</style>
</head>
<body>
<p>
<button id="hoge">接続</button>
<button id="fuga">切断</button>
</p>
<p>
<input id="data" value="SYNCER">
<button id="send">送信</button>
</p>
<hr>
<div id="result"></div>
<script>
var ws = null ;
var element1 = document.getElementById( "hoge" ) ;
var element2 = document.getElementById( "fuga" ) ;
var element3 = document.getElementById( "send" ) ;
// 接続
element1.onclick = function () {
if ( ws && ws.readyState === 1 ) return false ;
ws = new WebSocket( "wss://socket.syncer.jp/connect" ) ;
ws.onopen = function() {
ws.onmessage = function( message ) {
logUpdate( message.data ) ;
}
ws.onclose = function() {
logUpdate( "通信を切断しました。" ) ;
}
}
}
// 切断
element2.onclick = function () {
if ( ws && ws.readyState === 1 ) ws.close() ;
}
// 送信
element3.onclick = function () {
ws.send( document.getElementById( "data" ).value ) ;
}
var logUpdate = function ( text, noDate ) {
var resultElement = document.getElementById( "result" ) ;
resultElement.textContent = text + ( noDate ? "" : "(" + new Date().toLocaleString() + ")" ) + "\n" + resultElement.textContent ;
}
</script>
</body>
</html>
コンストラクタ
WebSocket()
新しいWebSocketのオブジェクトを作成します。
プロパティ
binaryType
サーバーに送信する予定の、バイナリデータの種類を返すプロパティです。
bufferedAmount
send()でこれからサーバーに送信する予定の、未送信データのサイズをbyteで返すプロパティです。
extensions
ソケット通信においてサーバー側が許可する拡張機能を返すプロパティです。具体的には、WebSocketサーバーのレスポンスヘッダーにある、Sec-WebSocket-Extensionsの値です。
protocol
ソケット通信しているサーバー側が許可する、下位プロトコルの情報を返すプロパティです。
readyState
ソケット通信の状態を表す数値を返します。
url
ソケット通信先のurlを返します。
メソッド
close()
サーバーとの通信を切断します。
send()
クライアントからサーバーにデータを送信します。
定数
CLOSED
3を返します。この値は、ソケット通信の切断が完了し、通信をしていない状態を表します。
CLOSING
2を返します。この値は、ソケット通信の切断を開始して、まだ切断が完了していない状態を表します。
CONNECTING
0を返します。この値は、ソケット通信を接続を開始して、まだ接続が完了していない状態を表します。
OPEN
1を返します。この値は、ソケット通信の接続が確立し、通信中であることを表します。
イベント
onclose
ソケット通信で通信が終了した時に発火します。
onerror
ソケット通信で接続に失敗した時に発火します。
onmessage
ソケット通信でサーバー側からのメッセージを受信した時に発火します。
onopen
ソケット通信で接続が確立した時に発火します。
サポート状況
クリックすると、バージョンごとの対応状況を確認できます。
Features | Chrome | Firefox | Safari | Edge | IE | Opera | iOS Safari | Android |
---|---|---|---|---|---|---|---|---|
WebSocket | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
binaryType | ● 15+ | ● 11+ | ● 6.0+ | ● | ● 10+ | ● 15+ | ● 6.0+ | ● 4.4+ |
bufferedAmount | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
close() | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
CLOSED | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
CLOSING | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
CONNECTING | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
extensions | ● 16+ | ● 11+ | ● 6.0+ | ● | ● 10+ | ● 15+ | ● 6.0+ | ● 4.4+ |
onclose | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
onerror | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
onmessage | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
onopen | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
OPEN | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
protocol | ● 15+ | ● 11+ | ● 6.0+ | ● | ● 10+ | ● 15+ | ● 6.0+ | ● 4.4+ |
readyState | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
send() | ● | ● 11+ | ● 5.1+ | ● | ● 10+ | ● 15+ | ● | ● 4.4+ |
url | ● | ● 11+ | ● 6.0+ | ● | ● 10+ | ● 15+ | ● 6.0+ | ● 4.4+ |
WebSocket() | ● | ● 11+ | ● 6.0+ | ● | ● 10+ | ● 15+ | ● 6.0+ | ● 4.4+ |
関連記事
- WebSocket.send()
- send()は、WebSocketのメソッドです。ソケット通信で、クライアントからサーバーにデータを送信します。文字列だけではなく、バイナリデータ、Blobデータなど送信できます。
- WebSocket.onopen
- onopenは、WebSocketのイベントです。ソケット通信で接続が確立した時にopenイベントが発生し、ここに設定したコールバック関数が呼び出されます。
- IDLリファレンス
- WHATWGやW3Cで定義されているDOMなどのWeb APIの仕様を、サンプルコードやデモ付きでまとめています。
- Data URIからBlob(File)を作成する
- Data URIの文字列からBlob(File)を作成します。