通信(Javascript)

通信(Javascript) #

Javascriptにおける通信の方法についてを述べる。

WebSocket #

WebSocketはHTTPとは異なる、双方向通信を実現する通信プロトコルである。

WebSocketを表すオブジェクトは、次のコンストラクタで作成できる。

WebSocket(url);

引数には、接続先のサーバのURLを入力する。なお、このコンストラクタを呼び出しオブジェクトを生成するタイミングで、サーバとの接続を開始する。

WebSocketの主なAPIは以下の通り。

プロパティ名 意味
url 接続先のURL
readyState 現在の接続状態
bufferedAmount WebSocketオブジェクト内にあるデータのサイズを示す。0の時、プログラムから送信指示があったデータはネットワークに送信されている状態。
メソッド名 意味
send() サーバにデータを送信する
close() サーバとの接続を切断する
イベントハンドラ名 意味
onopen サーバとの接続確立が成功した時
onmessage サーバから新しいメッセージが届いた時
onclose サーバとの接続がクローズした時
onerror エラーが発生した時

また、readyStateプロパティで得られる値は以下の通り。

意味
CONNECTING 接続中
OPEN 接続確立済みでサーバとの通信が可能な状態
CLOSING 接続切断中
CLOSED 接続切断済み

WebSocketの接続確立におけるこれらAPIの利用を示した図を以下に記載する。

XMLHttpRequest #

XMLHttpRequestは、Javascriptから呼び出し可能なHTTP通信を提供するAPIである。

これにより、スクリプトがHTTP通信を行うことが可能になり、画面遷移を伴わずに、HTTPリクエストを送信することができる。

この技術を利用したものをAjaxと呼ぶこともあり、Single Page Applicationの実現にも利用される。

XMLHttpRequestのAPIは以下の通り。

プロパティ名 意味
readyState 現在の接続状態
timeout リクエストのタイムアウト時間
withCredentials クロスドメイン通信時にユーザの認証情報を含める場合にはtrue,それ以外はfalse
メソッド名 意味
open() リクエストメソッド(GET,POSTなど)、リクエスト先URL、非同期フラグ、ユーザ名、パスワードを設定する
setRequestHeader() リクエストヘッダを追加する
send() サーバにデータを送信する
abort() 通信を中止する
getResponseHeader() レスポンスヘッダ引数で指定された名前を持つ値を返す
getAllResponseHeader() レスポンスヘッダを返す
イベントハンドラ名 意味
onloadstart リクエストを開始した
onprogress データを送信(受信)中
onabort 通信が中止された時
onerror エラーが発生した時
onload リクエストが正常に完了した時
ontimeout リクエストがタイムアウトした時

XMLHttpRequestのAPIの一連の流れを示した図を以下に記載する。

Server-Sent Events #

Server-Sent Eventsは、Webサーバからブラウザへのデータプッシュを受信するためのインタフェースである。

Server-Sent Eventsでは、サーバからMIME-type text/event-streamの形式でデータを送信する事ができる。

API類は以下の通り。

プロパティ名 意味
readyState 現在の接続状態
メソッド名 意味
EventSource() EventSourceオブジェクトのコンストラクタで、サーバへの接続を開始する。引数には接続先URLを入力
close() サーバ接続を切断する
イベントハンドラ名 意味
onopen サーバとの接続確立が成功した時
onmessage サーバから新しいメッセージが届いた時
onerror エラーが発生した時

また、readyStateプロパティで得られる値は以下の通り。

意味
CONNECTING 接続中
OPEN 接続確立済みでサーバとの通信が可能な状態
CLOSED 接続切断済み

Server-Sent EventsのAPIの一連の流れを示した図を以下に記載する。