Ana içeriğe atla
WebSocket sorunlarının çoğu üç gruba ayrılır: bağlantı reddedilir, bağlanır ama hiçbir şey gelmez ya da bir süre çalışıp kopar. Önce hangisini yaşadığınızı belirleyin.

Çalıştığı bilinen bir abonelikle başlayın

slotSubscribe her slotta, saniyede yaklaşık beş kez tetiklenir, bu yüzden bağlantının kendisinin çalışıp çalışmadığını neredeyse anında gösterir. wscat aracını npm install -g wscat ile kurun, ardından:
Çalışan bir bağlantı bir abonelik kimliğiyle, ardından bir bildirim akışıyla yanıt verir:
Bu çalışıyor ama kendi aboneliğiniz çalışmıyorsa sorun bağlantıda değil, aboneliktedir. Bağlı ama güncelleme gelmiyor bölümüne geçin.

Bağlantı reddedildi

Kimlik doğrulama WebSocket el sıkışması sırasında yapılır. Başarısız olduğunda sunucu, protokol değiştirmek yerine yükseltme isteğine normal bir HTTP hatası ve bir JSON gövdesiyle yanıt verir. Birçok WebSocket kütüphanesi yalnızca “unexpected server response: 403” bildirir ve gövdeyi atar, bu yüzden gerçek nedeni görmek için el sıkışmayı curl ile kontrol edin:
HTTP/1.1 101 Switching Protocols, kimlik doğrulamanın geçtiği anlamına gelir. Aksi halde: Kontrol edilecek diğer şeyler:
  • Ana bilgisayar çözümleniyor mu. WebSocket RPC ana bilgisayarlarında çalışır: wss://{region}.rpc.orbitflare.com. wss://mainnet.rpc... veya wss://global.rpc... diye bir ana bilgisayar yoktur. Liste için Altyapı sayfasına bakın.
  • URL wss:// kullanıyor mu. Bir WebSocket istemcisine https:// URL’si vermek, istek OrbitFlare’e ulaşmadan başarısız olur.
  • Yalnızca TypeScript: Cannot find package 'ws', isteğe bağlı eş bağımlılığın eksik olduğu anlamına gelir. npm install ws çalıştırın.

Bağlı ama güncelleme gelmiyor

Sunucu her aboneliği sayısal bir kimlikle onaylar. Hiç kimlik almazsanız istek reddedilmiştir ve yanıt nedenini söyler:
Hata ayıklarken yalnızca bildirimleri değil, sunucunun gönderdiği her mesajı loglayın. Hatalar aynı soket üzerinden gelir ve gözden kaçması kolaydır. Abonelik kabul edildi ama sessiz kalıyorsa:
  • Hesap değişmiyor. accountSubscribe yalnızca hesabın verisi veya lamport’ları değiştiğinde tetiklenir. Yoğun olduğunu bildiğiniz bir hesapla test edin, örneğin her slotta değişen SysvarC1ock11111111111111111111111111111111.
  • Filtre hiçbir şeyle eşleşmiyor. programSubscribe ve logsSubscribe için, hiçbir işlemde görünmeyen bir adres olay üretmez. Önce adresi bir explorer’da kontrol edin.
  • İmza eski. signatureSubscribe yalnızca yakın tarihli işlemleri bilir. Birkaç dakikadan eski her şey için bunun yerine searchTransactionHistory: true ile getSignatureStatuses çağırın. Bkz. Bir işlemin onaylanmasını bekleyin.

Kopan bağlantılar

Boştaki bağlantılar uyarısız kapanır

Trafiği olmayan bir bağlantı sonunda düşürülür ve bir kapatma çerçevesiyle değil aniden kapatılır, bu yüzden istemciniz boş bir nedenle 1006 kodunu görür. Bağlantıyı her 20 ila 30 saniyede bir WebSocket ping çerçeveleri göndererek canlı tutun:
{"method":"ping"} gibi bir JSON-RPC mesajı keepalive değildir. Solana’da ping adlı bir RPC metodu yoktur, bu yüzden sunucu -32601 Method not found ile yanıt verir. Kütüphanenizin sağladığı protokol düzeyindeki ping çerçevesini kullanın.
OrbitFlare SDK’ları her 10 saniyede bir ping çerçevesi gönderir ve üç pong kaçırıldıktan sonra yeniden bağlanır, bu yüzden onları kullanırken bunu kendiniz yapmanız gerekmez.

Yeniden bağlandıktan sonra abonelikler kaybolur

Abonelikler bir bağlantıya aittir. Bağlantı koptuğunda abonelikler de gider ve yeni bir bağlantı hiç aboneliksiz başlar. Nelere abone olduğunuzun listesini tutun ve yeniden bağlandıktan sonra bu istekleri tekrar gönderin. Abonelik kimliklerinin değiştiğini unutmayın. SDK’lar abonelikleri takip eder ve otomatik olarak yeniden abone olur. sub.next() döngünüz yeniden bağlantılar boyunca çalışmaya devam eder.

Abonelikten çıkma başarısız oluyor

Invalid subscription id., bu kimliğin bu bağlantıda bulunmadığı anlamına gelir. Genellikle bağlantı değiştirilmiştir ve kimlik eski bağlantıya aittir. Görmezden gelmek güvenlidir.

Çok fazla bağlantı

Her IP, gRPC ile paylaşılan 50 eşzamanlı WebSocket bağlantısı tutabilir. Her abonelik için bir bağlantı açmak yerine tek bir bağlantı açın ve üzerine çok sayıda abonelik koyun. Bkz. bağlantı limitleri.

Hâlâ çözemediyseniz

Bağlandığınız bölgeyi, abonelik isteğinin tam halini, sunucunun geri gönderdiği her mesajı ve kapatma kodunu toplayın. Ardından Discord üzerinden sorun. Bu dört bilgiyle çoğu sorun tek bir yanıtta tespit edilebilir.