> ## 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 API

> Hesaplar, slotlar, günlükler ve daha fazlası için gerçek zamanlı Solana abonelikleri

## 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
```

<Tip>
  Lisans anahtarınız [OrbitFlare Dashboard](https://orbitflare.com/dashboard) sitesinin **Lisanslar** bölümünde bulunur. HTTP RPC için kullanılan aynı anahtar olan `api_key` sorgu parametresi olarak iletin.
</Tip>

## Bağlanma

```javascript theme={null}
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}`);
});
```

<Note>
  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.
</Note>

## Abonelik Metodları

### accountSubscribe

Belirli bir hesabın lamport bakiyesi veya verisi değiştiğinde güncelleme alın.

```javascript theme={null}
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.

```javascript theme={null}
// 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.

```javascript theme={null}
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.

```javascript theme={null}
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.

```javascript theme={null}
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.**

```javascript theme={null}
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.

```javascript theme={null}
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.**

```javascript theme={null}
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.

```javascript theme={null}
// 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:

```javascript theme={null}
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:

```javascript theme={null}
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](/tr/authentication#websocket) sayfasına bakın.

## Ayrıca Bakınız

<CardGroup cols={2}>
  <Card title="HTTP RPC API" icon="server" href="/tr/rpc/http">
    JSON-RPC 2.0 istek formatı, toplu istekler ve tüm kullanılabilir metodlar.
  </Card>

  <Card title="Hata Kodları" icon="triangle-exclamation" href="/tr/rpc/error-codes">
    HTTP durum kodları, JSON-RPC hataları ve bunların nasıl yönetileceği.
  </Card>
</CardGroup>
