コネクション、サブスクリプション、そしてハートビート

6MM WebSocketストリームに接続し、トピックを購読し、つながりを維持し、メッセージ封筒を安全に処理しましょう。

Markdownとして表示

市場データや、ポーリングなしで最新の状態を保つ必要があるプライベートなユーザー状態の更新には WebSocket ストリームを活用しましょう。

接続 URL

wss://ws.6mm.com/ws

プライベートストリームには、プライベートチャネルドキュメントに記載されている listenKey やアクセストークンなどの認証コンテキストが必要です。

購読

1{ "id": "1772007814666", "op": "subscribe", "args": ["market.depth.BTCUSDT"] }

購読確認の成功:

1{
2 "id": "1772007814666",
3 "event": "subscribe",
4 "success": true,
5 "data": ["market.depth.BTCUSDT"]
6}

購読解除

1{ "id": "1772007814667", "op": "unsubscribe", "args": ["market.depth.BTCUSDT"] }

アプリケーションping(アプリケーションping)

1{ "id": "1772007814668", "op": "ping", "args": [] }

メッセージ封筒

パブリックプッシュは一貫したエンベロープを使用します:

1{
2 "topic": "market.depth.BTCUSDT",
3 "event": "data",
4 "ts": 1772007815000,
5 "data": {}
6}

運用上の提言

  • すべての購読、解約、pingリクエストに対して一意のクライアント側 id を生成する。
  • reconnectを新しいセッションとして扱い、必要なトピックを再購読する。
  • 返送された topic がサービスが期待するチャネルと一致していることを検証する。
  • プライベートな注文やアカウントイベントが関与する場合、メッセージ処理を冪等に保つこと。
  • 接続状態の変化、サブスクリプションの確認、異常な切断をログ記録する。

Reconnectワークフロー

  1. 前のソケットを閉じるか破棄し、新しい接続を作成する。
  2. 有効な listenKey またはアクセストークンでプライベートストリームを再認証する。
  3. 必要なトピックをすべて再登録し、承認応答を待つこと。
  4. インクリメンタル更新を適用する前に、ローカルの注文簿状態を新しいスナップショットに置き換えます。
  5. 私的なイベントが見逃された可能性がある場合、未解決の命令、ポジション、バランスを REST で調整すること。

再接続試行にはジッター付きの有界指数バックオフを使いましょう。継続的に再接続するクライアントは、無期限に再接続するのではなくオペレーターに通知すべきです。

心拍と古い繋がり

  • 最新の受信メッセージと成功したping確認を追跡する。
  • 生産環境で承認された心拍間隔とアイドル閾値を使用。
  • 設定済みの閾値を超えた場合、 TCP ソケットが開いているように見えても接続をステールとみなす。
  • 古いソケットからのサブスクリプションを再利用しないでください;再接続のたびに明示的に再購読してください。