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ı:
| Alan | Açıklama |
|---|
lamports | Mevcut lamport bakiyesi |
data | Hesap verisi (encoding parametresiyle belirlenen kodlama) |
owner | Sahip program açık anahtarı |
executable | Hesabın çalıştırılabilir bir program olup olmadığı |
rentEpoch | Kiranı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ı:
| Alan | Açıklama |
|---|
signature | İşlem imzası (base-58) |
err | Başarılıysa null, başarısızsa hata nesnesi |
logs | Gü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ı:
| Alan | Açıklama |
|---|
slot | Mevcut slot numarası |
parent | Üst slot numarası |
root | En 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