Ana içeriğe atla

Genel Bakış

OrbitFlare, gerçek zamanlı Solana verisi için kalıcı WebSocket bağlantılarını destekler. WebSocket abonelikleri, zincir üzerinde gerçekleştikçe güncellemeleri istemcinize iletir — yoklama gerekmez. WebSocket uç noktaları, HTTP API ile aynı bölge kodlarıyla wss:// şemasını kullanır:
wss://{region}.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY
Otomatik yönlendirmeli mainnet uç noktası için:
wss://mainnet.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY
Lisans anahtarınız OrbitFlare Dashboard sitesinin Lisanslar bölümünde bulunur. HTTP RPC için kullanılan aynı anahtar olan api_key sorgu parametresi olarak iletin.

Bağlanma

const WebSocket = require("ws");

const ws = new WebSocket(
  "wss://mainnet.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY"
);

ws.on("open", () => {
  console.log("Connected");
});

ws.on("message", (data) => {
  const msg = JSON.parse(data);
  console.log("Received:", msg);
});

ws.on("error", (err) => {
  console.error("WebSocket error:", err);
});

ws.on("close", (code, reason) => {
  console.log(`Connection closed: ${code} ${reason}`);
});
Herhangi bir mesaj alışverişi olmaksızın 60 saniyeden fazla süre boşta kalan WebSocket bağlantıları sunucu tarafından kapatılır. Bağlantıyı sürdürmek için ping gönderin veya aboneliklerinizi aktif tutun.

Abonelik Metodları

accountSubscribe

Belirli bir hesabın lamport bakiyesi veya verisi değiştiğinde güncelleme alın.
ws.on("open", () => {
  ws.send(JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "accountSubscribe",
    params: [
      "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri",
      { encoding: "base64", commitment: "confirmed" }
    ],
  }));
});
Güncelleme alanları:
AlanAçıklama
lamportsMevcut lamport bakiyesi
dataHesap verisi (encoding parametresiyle belirlenen kodlama)
ownerSahip program açık anahtarı
executableHesabın çalıştırılabilir bir program olup olmadığı
rentEpochKiranın bir sonraki ödeneceği dönem

logsSubscribe

İşlem günlük mesajlarını gerçek zamanlı olarak alın. İsteğe bağlı olarak belirli bir programa filtreleyin.
// Tüm işlemler
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 2,
  method: "logsSubscribe",
  params: ["all"],
}));

// Filter to a specific program
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 3,
  method: "logsSubscribe",
  params: [
    { mentions: ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"] }, // Raydium AMM
    { commitment: "confirmed" }
  ],
}));
Güncelleme alanları:
AlanAçıklama
signatureİşlem imzası (base-58)
errBaşarılıysa null, başarısızsa hata nesnesi
logsGünlük mesajı dizilerinin dizisi

slotSubscribe

Her slot işlendiğinde bir bildirim alın.
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 4,
  method: "slotSubscribe",
  params: [],
}));
Güncelleme alanları:
AlanAçıklama
slotMevcut slot numarası
parentÜst slot numarası
rootEn yüksek onaylanmış kök slot

signatureSubscribe

Belirli bir işlem imzası belirli bir onay seviyesine ulaştığında tek seferlik bir bildirim alın.
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 5,
  method: "signatureSubscribe",
  params: [
    "TRANSACTION_SIGNATURE_HERE",
    { commitment: "finalized" }
  ],
}));
İlk bildirim gönderildikten sonra abonelik otomatik olarak kapanır.

programSubscribe

Belirli bir programa ait tüm hesaplara yönelik güncellemeler alın.
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 6,
  method: "programSubscribe",
  params: [
    "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", // SPL Token
    {
      encoding: "jsonParsed",
      commitment: "confirmed",
      filters: [{ dataSize: 165 }], // Standard token account size
    }
  ],
}));

blockSubscribe

Her blok onaylandığında tam blok verisi alın. Eklenti gerektirir — etkinleştirmek için destek ile iletişime geçin.
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 7,
  method: "blockSubscribe",
  params: ["all", { commitment: "confirmed", encoding: "base64" }],
}));

rootSubscribe

En yüksek onaylanmış kök slot her ilerlediğinde alın.
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 8,
  method: "rootSubscribe",
  params: [],
}));

voteSubscribe

Dedikodu ağında gözlemlenen ham oy işlemlerini alın. Yüksek hacim — dikkatli filtreleyin.
ws.send(JSON.stringify({
  jsonrpc: "2.0",
  id: 9,
  method: "voteSubscribe",
  params: [],
}));

Abonelikten Çıkma

Her abonelik metodunun karşılık gelen bir Unsubscribe metodu vardır. İlk abonelik yanıtında döndürülen abonelik kimliğini iletin.
// Subscribe and capture the subscription ID
ws.on("message", (data) => {
  const msg = JSON.parse(data);

  // Subscription confirmation contains the subscription ID
  if (msg.id === 1 && msg.result !== undefined) {
    const subscriptionId = msg.result;
    console.log("Subscribed, ID:", subscriptionId);

    // Unsubscribe later
    ws.send(JSON.stringify({
      jsonrpc: "2.0",
      id: 10,
      method: "accountUnsubscribe",
      params: [subscriptionId],
    }));
  }
});
Kullanılabilir abonelikten çıkma metodları: accountUnsubscribe, logsUnsubscribe, slotUnsubscribe, signatureUnsubscribe, programUnsubscribe, blockUnsubscribe, rootUnsubscribe, voteUnsubscribe.

Canlı Tutma (Keepalive)

WebSocket bağlantıları 60 saniye hareketsizlikten sonra kapatılır. Bağlantıyı canlı tutmak için periyodik olarak JSON-RPC ping gönderin:
const pingInterval = setInterval(() => {
  if (ws.readyState === WebSocket.OPEN) {
    ws.send(JSON.stringify({ jsonrpc: "2.0", id: 0, method: "ping" }));
  }
}, 30_000);

ws.on("close", () => clearInterval(pingInterval));

Yeniden Bağlanma

Üretim uygulamaları için üstel geri çekilmeli otomatik yeniden bağlanmayı uygulayın:
function connect(url, onMessage) {
  let ws;
  let delay = 1000;
  let attempt = 0;

  function createConnection() {
    ws = new WebSocket(url);

    ws.on("open", () => {
      console.log("Connected (attempt", attempt + 1, ")");
      delay = 1000; // reset backoff on successful connection
      attempt = 0;
      // re-subscribe to all channels here
    });

    ws.on("message", onMessage);

    ws.on("close", () => {
      attempt++;
      const nextDelay = Math.min(delay * 2, 30_000);
      console.log(`Reconnecting in ${delay}ms...`);
      setTimeout(createConnection, delay);
      delay = nextDelay;
    });

    ws.on("error", (err) => console.error("WebSocket error:", err));
  }

  createConnection();
  return () => ws?.close();
}

const disconnect = connect(
  "wss://mainnet.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY",
  (data) => {
    const msg = JSON.parse(data);
    console.log("Update:", msg);
  }
);

Bağlantı Limitleri

WebSocket bağlantıları, gRPC bağlantılarıyla aynı IP başına limiti paylaşır. Ayrıntılar için Kimlik Doğrulama & Limitler sayfasına bakın.

Ayrıca Bakınız