Socket.IOは、リアルタイムWebアプリケーション用のJavaScriptライブラリです。Webクライアントとサーバー間でリアルタイムの双方向通信を可能にします。2つの部分から構成されます: ブラウザーで実行されるクライアント側ライブラリと、Node.js用のサーバー側ライブラリです。両方のコンポーネントはほぼ同一のAPIを持っています。Node.jsと同様に、イベント駆動型です。
0: open(新しいトランスポートが開かれたときにサーバーから送信されます(再確認))
1: クローズ(このトランスポートのクローズをリクエストしますが、接続自体はシャットダウンしません。)
2: ping(クライアントが送信します。サーバーは同じデータを含む pong パケットで応答する必要があります。)
使用例
クライアントが送信: 2probe
server sends: 3probe
3: pong(サーバーが ping パケットに応答するために送信します。)
4: 文字列メッセージ(実際のメッセージ。クライアントとサーバーはデータとともにコールバックを呼び出す必要があります)
example:
42/chat,["join","{room:1}"]
4はengine.ioプロトコルのメッセージパケットタイプです。
2 は socket.io プロトコルの EVENT タイプです。
/chat は socket.io で処理されるデータです
socket.io は "join" イベントを発火します。
は「room: 1」データを渡します。名前空間を省略できるのは、それが / の場合のみです。
5: アップグレード(engine.io がトランスポートを切り替える前に、サーバーとクライアントがそのトランスポートで通信できるかどうかをテストします。このテストが成功すると、クライアントはアップグレードパケットを送信し、サーバーに古いトランスポートのキャッシュをフラッシュして新しいトランスポートに切り替えるよう要求します。)
6: noop(ノープパケット。主にWebSocket接続が受信されたときにポーリングサイクルを強制的に発生させるために使用されます。)
API: SocketIOのバージョンを指定します:
ioAPI0: socket.io 0.* サーバーをサポートします(デフォルトで選択)。
ioAPI1: socket.io 1.* サーバーをサポートします
ioAPI2: socket.io 2.* サーバーをサポートします
ioAPI3: socket.io 3.* サーバーをサポートします。
ioAPI4: socket.io 4.* サーバーをサポートします
Base64: 有効にすると、バイナリメッセージは base64 として受信されます。
HandShakeCustomURL: socket.io セッションを取得するための URL のカスタマイズを可能にします。
HandShakeTimestamp: 新しいセッションがリクエストされるときにパラメータとしてタイムスタンプを送信する場合のみ有効にします(gevent-socketio Pythonサーバーにアクセスしようとする場合はこのプロパティを有効にしてください)。
HandShakeAuthToken: サーバーが認証にトークンを要求する場合は、ここに認証トークンを設定します。
Namespace: サーバーに接続するときに名前空間を設定できます。
Polling: このプロパティを無効にすると、クライアントはトランスポートとして WebSocket を使用してサーバーに直接接続します。
パラメータ: 接続パラメータを設定できます。
EncodeParameters: 有効にすると、パラメータがエンコードされます。
WriteDataメソッドを使用して、socket.ioサーバーにメッセージを送信します(Message Typesセクションに従います)。
1. ユーザー名として John を使用して、1 つのパラメータで "add user" メソッドを呼び出します。
WriteData('42["add user", "John"]');
新しい WebSocket 接続が確立される前に、socket.io サーバーはクライアントに新しいセッション id を取得するための新しい HTTP 接続を開くよう要求します。場合によっては、socket.io サーバーが HTTP ヘッダーを使用した認証を必要とします。このイベントを使用して、Basic 認証や Bearer トークン認証などのカスタム HTTP ヘッダーを追加できます。
このイベントは socket.io 接続が成功した後に呼び出され、クライアントはサーバーにメッセージを送信できます。ここで例えばネームスペースにサブスクライブできます。
WebSocket サーバーがセキュアな接続を要求する場合、クライアントがサーバーに接続しようとするとこのようなエラーメッセージが表示されることがあります。
Error connecting with SSL. error:XXXXXXXX:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
このエラーは、クライアントがサーバーでサポートされていない TLS バージョンを使用して接続しようとしていることを意味します。
このエラーを解決するには、WebSocket クライアントコンポーネントの OnSSLAfterCreateHandler を処理して、より新しい TLS バージョンを設定する必要があります。
例: ここではTLS 1.2をプロトコルバージョンとして設定します。
procedure TfrmWebSocketClient.SOCKETIOHTTPConnectionSSL(Sender: TObject;
aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
TIdSSLIOHandlerSocketOpenSSL(aSSLHandler).SSLOptions.Method := sslvTLSv1_2;
end;