# WebSocketとSSE (/ja/docs/requests/websocket-and-sse)

WebSocketリクエストは、開いたままの接続を作ります。メッセージを送信し、サーバのメッセージが届くそばから確認できます。
Server-Sent Events（SSE）は、レスポンスがストリーミングし続ける通常のHTTPリクエストです。Echolotは各イベントを届くそばから表示します。

## WebSocketリクエスト [#websocket-requests]

<Shot id="requests-websocket-log" alt="デモAPIに接続したRealtime › Order updates：保存済みのSubscribeとPingメッセージを表示したメッセージタブと、送受信した注文イベントが並ぶレスポンスペインのメッセージログ" />

### 接続する [#connect]

1. <strong>ファイル › 新規WebSocketリクエスト</strong>を選ぶか、サイドバーの<strong>リクエスト</strong>の横にある<strong>+</strong>メニューから<strong>新規WebSocketリクエスト</strong>を選びます。
2. `ws://`または`wss://`で始まるアドレスを入力します。Alpenglowの**Realtime › Order updates**は`{{wsURL}}/orders`を使い、これは`wss://demo.echolot.dev/v1/orders`です。
3. **接続**（<kbd>⌘</kbd><kbd>R</kbd>）を選びます。

接続が開いている間、ボタンには<strong>接続解除</strong>と表示されます（もう一度<kbd>⌘</kbd><kbd>R</kbd>）。保護された環境が有効なときは、環境名付きで<strong>Productionに接続…</strong>と表示され、先に確認します。
[保護された環境](/docs/workspaces/protected-environments)を参照してください。

エディタのタブは次のとおりです：**ドキュメント**、**メッセージ**、**ヘッダー**、**パラメータ**、**認証**、**変数**、**テスト**、**スクリプト**、**設定**。
ヘッダー、クエリパラメータ、認証は、開始時のハンドシェイク（HTTPアップグレード）とともに送られるので、ヘッダーやアドレスでトークンを求めるサーバにも、そこで渡されます。
TLSの検証、プロキシ、証明書などの設定は、[HTTPリクエスト](/docs/requests/settings)と同じように適用されます。

### サブプロトコル [#subprotocols]

**メッセージ**タブの上部の**サブプロトコル**には、サーバに提示するプロトコルを、`graphql-ws, chat.v2`のようにカンマで区切って並べます。なしなら空にします。

### メッセージを送信する [#send-messages]

**メッセージ**タブの下部にメッセージを入力して、**送信**（<kbd>⇧</kbd><kbd>⌘</kbd><kbd>↩</kbd>）を選びます。`{{variables}}`が使えます。
接続が開くまで、欄には**接続してメッセージを送信**と表示されます。

よく送るメッセージは、リクエストとともに保存できます。欄の横の<strong>+</strong>を選ぶと、入力した内容が保存されます。保存したメッセージには、名前、テキスト、専用の<strong>送信</strong>ボタンがあります。
Order updatesには2つあります：

```json
{"op":"subscribe","channel":"orders"}
```

```json
{"op":"ping"}
```

保存したメッセージの先頭のボックスの**実行時に送信**は、あなたの操作なしにリクエストが実行されるときに送信するかどうかを決めます。
[ランナー](/docs/requests/runner)、コマンドライン、エージェントでの実行です。これらは、接続の後に有効なメッセージを順に送信し、10秒間待ち受けて閉じます。

### メッセージログ [#the-message-log]

レスポンスペインの**メッセージ**タブには、セッションが進行するとおりに表示されます。両方向のすべてのメッセージが、新しいものが最後に、時刻とサイズ付きで並び、接続が開いた時点と閉じた時点も表示されます。

- **すべて**、**送信**、**受信**で、方向によって絞り込みます。
- **メッセージをフィルタ**で、メッセージをテキストから探せます。
- **その他**は、JSONメッセージを整形して表示し、**折りたたむ**でもう一度折りたたみます。
- コピーボタンは、メッセージをコピーします。

サーバのpingには、Echolotが自動で応答します。フラグメントから組み立てられたメッセージは最大64 MBで、それより大きいメッセージは、コード1009で接続を閉じます。

接続が閉じると、セッションは[履歴](/docs/workspaces/history)に保存されます。ハンドシェイクがリクエストとして、メッセージログがレスポンスのボディとして保存されます。

## Server-Sent Events [#server-sent-events]

Server-Sent Eventsのストリームは、`text/event-stream`タイプのHTTPレスポンスで、イベントを送り続けます。そのためには通常のHTTPリクエストを使います。アドレス以外に設定するものはありません。

<Shot id="requests-sse-events" alt="デモAPIに送信したRealtime › Order events：番号付きのイベントが、それぞれイベント名、ID、JSONデータとともに並ぶ、レスポンスペインのイベントタブ" />

1. Alpenglowワークスペースで**Realtime › Order events**を開きます。`Accept: text/event-stream`付きで`GET {{baseURL}}/orders/events`を送信します。
2. **送信**を選びます。
3. レスポンスペインの**イベント**タブを選びます。

**イベント**タブには、各イベントが順番に、番号、イベント名、ID（`id:`）付きで一覧され、データはJSONならJSONとして表示されます。ストリームの実行中は新しいイベントを追い、その数も数えます。
**ボディ**タブには、サーバが書いたままのストリームが、届くにつれて伸びていく形で表示されます。

ストリームは、サーバが終了するか、**キャンセル**（<kbd>⌘</kbd><kbd>.</kbd>）を選ぶまで続き、届いた内容は保持されます。ストリームが始まった後は、リクエスト全体のタイムアウトは適用されなくなります。
実行時、コマンドライン、エージェントでは、ストリームは10秒後に終了されます。

ストリームを止まった場所から再開するには、最後のイベントのIDを`Last-Event-ID`ヘッダーで送り返します。デモAPIのストリームは、1秒間隔で20個のイベントを送り、`end`を送って終わり、`Last-Event-ID`に対応しています。

HTTP上のGraphQLサブスクリプションもServer-Sent Eventsを使います。[GraphQL](/docs/requests/graphql)を参照してください。

## コマンドラインから [#from-the-command-line]

`echolot send`は、ターミナルからWebSocketとSocket.IOのセッションを開き、イベントストリームを追います。[echolot send](/docs/cli/send)と[リアルタイムのチュートリアル](/docs/tutorials/realtime)を参照してください。
