JavaScriptでリアルタイムWebアプリを構築!HTML5 WebSocket APIの完全ガイド

2024-06-22

HTML5 WebSocket API をサポートするブラウザ

WebSocket をサポートする主要なブラウザ

  • Chrome: 4.0以降
  • Edge: 12以降
  • Firefox: 4以降
  • Safari: 5.1以降
  • Opera: 10.1以降
  • Internet Explorer: 10以降
  • Android: ブラウザバージョン 25以降
  • BlackBerry Browser

WebSocket を使用するには

  1. ブラウザが WebSocket をサポートしていることを確認します。
  2. WebSocket コンストラクタを使用して新しい WebSocket 接続を作成します。
  3. onopen イベントリスナーを使用して、接続が確立されたときに実行する関数を定義します。
  4. send() メソッドを使用して、サーバーにメッセージを送信します。
  5. close() メソッドを使用して、接続を閉じます。

WebSocket の利点

  • 双方向通信: クライアントとサーバーが互いにメッセージを送受信できます。
  • 低遅延: HTTP 要求/応答サイクルよりもはるかに低遅延で通信できます。
  • 低オーバーヘッド: HTTP ヘッダーなどの余分なオーバーヘッドがありません。
  • シンプル: 使用が簡単で、複雑な状態管理は必要ありません。

次の例は、WebSocket を使用してサーバーからメッセージを受信し、コンソールに表示する方法を示しています。

const ws = new WebSocket('ws://localhost:8080');

ws.onopen = function() {
  console.log('WebSocket connection opened');
};

ws.onmessage = function(event) {
  console.log('Received message: ' + event.data);
};

ws.onclose = function() {
  console.log('WebSocket connection closed');
};

ws.send('Hello from JavaScript!');



      HTML5 WebSocket API のサンプルコード

      HTML

      <!DOCTYPE html>
      <html lang="ja">
      <head>
        <meta charset="UTF-8">
        <title>WebSocket チャット</title>
      </head>
      <body>
        <h1>WebSocket チャット</h1>
        <input type="text" id="message" placeholder="メッセージを入力">
        <button onclick="sendMessage()">送信</button>
        <ul id="messages"></ul>
      
        <script>
          const socket = new WebSocket('ws://localhost:8080');
      
          socket.onopen = function() {
            console.log('WebSocket connection opened');
          };
      
          socket.onmessage = function(event) {
            const message = JSON.parse(event.data);
            const messageElement = document.createElement('li');
            messageElement.textContent = message.user + ': ' + message.text;
            messages.appendChild(messageElement);
          };
      
          socket.onclose = function() {
            console.log('WebSocket connection closed');
          };
      
          function sendMessage() {
            const message = document.getElementById('message').value;
            const messageData = JSON.stringify({ user: 'あなた', text: message });
            socket.send(messageData);
            document.getElementById('message').value = '';
          }
        </script>
      </body>
      </html>
      

      JavaScript

      const socket = new WebSocket('ws://localhost:8080');
      
      socket.onopen = function() {
        console.log('WebSocket connection opened');
      };
      
      socket.onmessage = function(event) {
        const message = JSON.parse(event.data);
        const messageElement = document.createElement('li');
        messageElement.textContent = message.user + ': ' + message.text;
        messages.appendChild(messageElement);
      };
      
      socket.onclose = function() {
        console.log('WebSocket connection closed');
      };
      
      function sendMessage() {
        const message = document.getElementById('message').value;
        const messageData = JSON.stringify({ user: 'あなた', text: message });
        socket.send(messageData);
        document.getElementById('message').value = '';
      }
      

      サーバー

      この例では、Node.js と Socket.IO を使用してサーバーを実装します。

      const app = require('express')();
      const server = require('http').createServer(app);
      const io = require('socket.io')(server);
      
      io.on('connection', function(socket) {
        socket.on('message', function(message) {
          io.emit('message', message);
        });
      });
      
      server.listen(3000, function() {
        console.log('Server listening on port 3000');
      });
      

      このコードを実行するには、次の手順を実行します。

      1. Node.js をインストールします。
      2. npm install express socket.io コマンドを実行して、必要な依存関係をインストールします。
      3. サーバーコード (上記) を server.js という名前のファイルに保存します。
      4. node server.js コマンドを実行してサーバーを起動します。
      5. Webブラウザで http://localhost:8080 にアクセスします。

      この例は、WebSocket を使用してチャットアプリケーションを作成する方法を示す基本的なものです。WebSocket を使用してより複雑なアプリケーションを作成することもできます。




      サーバーサイドライブラリを使用する

      WebSocket を使用してリアルタイム Web アプリケーションを構築するのを容易にするサーバーサイドライブラリが多数あります。これらのライブラリは、接続管理、メッセージング、認証などのタスクを処理するのに役立ちます。

      フレームワークを使用する

      WebSocket をサポートする Web フレームワークも多数あります。これらのフレームワークは、リアルタイム Web アプリケーションの開発を簡素化するために、ルーティング、テンプレート エンジニング、その他の機能を提供します。

      WebRTC を使用する

      WebRTC は、Web ブラウザ間でピアツーピアのリアルタイム通信を可能にする API です。WebSocket と同様に、WebRTC を使用してチャット、ゲーム、およびその他のリアルタイム Web アプリケーションを作成できます。

      WebRTC の利点

      • ピアツーピア通信: WebRTC を使用すると、サーバーを介さずにクライアント間で直接通信できます。
      • 低遅延: WebRTC は、WebSocket よりも低遅延で通信できます。
      • データ共有: WebRTC を使用すると、オーディオ、ビデオ、およびその他のデータを共有できます。

        上記に示した方法は、HTML5 WebSocket API を使用してリアルタイム Web アプリケーションを作成するほんの一例です。WebSocket を使用して作成できるアプリケーションの種類は無限大です。


          javascript web-applications html


          テーブルデザインをワンランクアップ!TBODY要素間にスペースを入れて見やすくする

          HTMLのTBODY要素は、テーブル内の行グループを表します。デフォルトでは、TBODY要素間にスペースはありませんが、CSSを使用して、上下に余白を追加することができます。方法TBODY要素間にスペースを入れる方法はいくつかあります。marginプロパティを使用して、TBODY要素の上下に余白を設定することができます。...


          グローバル変数からコールバック関数まで!JavaScript 関数間で値を渡す7つの方法

          関数を呼び出す際に、関数のカッコ内にカンマ区切りで引数を渡します。上記の例では、greet 関数に name という引数を渡しています。関数内では、渡された引数 name を使って挨拶のメッセージを出力しています。関数に複数の引数を渡すこともできます。...


          Flexbox初心者でも安心!コンテンツサイズに合わせたレイアウトの作り方

          この問題の根本的な原因は、Flexbox のデフォルトの動作にあります。Flexbox は、アイテムを main axis と呼ばれる軸に沿って配置します。そして、各アイテムは flex-basis というプロパティによって、デフォルトのサイズが決まります。...


          【React上級者向け】onChangeイベントの遅延でパフォーマンスアップ!詳細解説

          ReactJS では、onChange イベントを使用して、入力フィールドの値が変更されたときに処理を実行できます。しかし、タイピング中に頻繁に onChange イベントがトリガーされると、パフォーマンスが低下したり、意図しない動作が発生したりする可能性があります。...


          【初心者向け】JavaScriptのimportエラー「SyntaxError: Cannot use import statement outside a module」の解決方法

          このエラーは、JavaScriptファイルで import ステートメントを使用しようとした際に発生します。これは、import ステートメントはモジュール外部で使用できないためです。原因import ステートメントは、モジュール内で他のモジュールの機能を読み込むために使用されます。モジュールとは、JavaScriptファイルのコードをまとめた独立した単位です。...


          SQL SQL SQL SQL Amazon で見る



          Node.jsでWebSocketを使いこなす:リアルタイムチャットアプリでパフォーマンスを解き放つ

          AJAXは、非同期型JavaScriptとXMLの略称で、Webページを更新せずにサーバーからデータをリクエストして取得する技術です。従来のWebページ更新方法と異なり、AJAXを使用すると、ページ全体を再読み込みする必要がなく、ユーザーインターフェースの応答性を維持できます。