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 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ı:
Alan Açı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ı:
Alan Açı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
HTTP RPC API JSON-RPC 2.0 istek formatı, toplu istekler ve tüm kullanılabilir metodlar.
Hata Kodları HTTP durum kodları, JSON-RPC hataları ve bunların nasıl yönetileceği.