> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# WebSocket Hata Ayıklama

> OrbitFlare'e yapılan bir Solana WebSocket bağlantısının neden reddedildiğini, sessiz kaldığını veya koptuğunu bulun: el sıkışma hataları, hiç tetiklenmeyen abonelikler, boşta kalma kopmaları ve keepalive.

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](https://github.com/websockets/wscat) aracını `npm install -g wscat` ile kurun, ardından:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
wscat -c "wss://fra.rpc.orbitflare.com?api_key=$ORBITFLARE_LICENSE_KEY"
> {"jsonrpc":"2.0","id":1,"method":"slotSubscribe"}
```

Çalışan bir bağlantı bir abonelik kimliğiyle, ardından bir bildirim akışıyla yanıt verir:

```json theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
{"jsonrpc":"2.0","result":332807,"id":1}
{"jsonrpc":"2.0","method":"slotNotification","params":{"result":{"slot":459760339,"parent":459760338,"root":459760337},"subscription":332807}}
```

Bu çalışıyor ama kendi aboneliğiniz çalışmıyorsa sorun bağlantıda değil, aboneliktedir. [Bağlı ama güncelleme gelmiyor](#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:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
curl -i --http1.1 \
  -H "Connection: Upgrade" -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
  "https://fra.rpc.orbitflare.com/?api_key=$ORBITFLARE_LICENSE_KEY"
```

`HTTP/1.1 101 Switching Protocols`, kimlik doğrulamanın geçtiği anlamına gelir. Aksi halde:

| Durum | Gövde | Çözüm |
| - | - | - |
| `401` | `{"code":-32401,"message":"missing API key"}` | URL'ye `?api_key=YOUR_LICENSE_KEY` ekleyin. Tarayıcılar WebSocket'te başlık ayarlayamaz, bu yüzden sorgu parametresi güvenilir seçenektir |
| `403` | `{"code":-32402,"message":"invalid API key"}` | Anahtar yanlış ya da yeniden oluşturuldu. Panelden tekrar kopyalayın |
| `403` | `{"code":-32404,"message":"IP not whitelisted"}` | Bu makinenin IP'sine veya bu bölgeye lisansınızda izin verilmiyor. IP'yi panelden ekleyin veya lisansınızın kapsadığı bir bölgeye bağlanın |

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ı](/tr/infrastructure) 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:

```json theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid Request: Invalid pubkey provided"},"id":1}
```

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](/tr/recipes#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:

```javascript theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
const ws = new WebSocket(`wss://fra.rpc.orbitflare.com?api_key=${process.env.ORBITFLARE_LICENSE_KEY}`);

const keepalive = setInterval(() => ws.ping(), 25_000);
ws.on("close", () => clearInterval(keepalive));
```

> [!WARNING]
>
> `{"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](/tr/authentication#veri-akışı-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](https://discord.gg/orbitflare) üzerinden sorun. Bu dört bilgiyle çoğu sorun tek bir yanıtta tespit edilebilir.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.