Soketi.rs - Yüksek Performanslı WebSocket Sunucusu

Rust ile yazılmış, yüksek performanslı, Pusher uyumlu WebSocket sunucusu. Soketi.rs, public, private ve presence kanalları desteğiyle gerçek zamanlı mesajlaşma yetenekleri sağlar.
✨ Özellikler
- 🚀 Yüksek Performans: Maksimum hız ve verimlilik için Rust ile geliştirildi
- 📡 Pusher Protokolü: Pusher istemci kütüphaneleriyle %100 uyumlu
- 🔐 Kimlik Doğrulama: Private ve presence kanalları için yerleşik destek
- 👥 Presence Kanalları: Gerçek zamanlı kullanıcı takibi ve üye listeleri
- 💬 İstemci Olayları: Doğrudan istemciden istemciye mesajlaşma
- 📊 Metrikler: İzleme için Prometheus metrikleri
- 🔄 Yatay Ölçekleme: Çoklu sunucu dağıtımları için Redis adaptörü
- 🗄️ Çoklu Backend: MySQL, PostgreSQL, DynamoDB desteği
- 🎯 Hız Sınırlama: Uygulama başına yapılandırılabilir hız limitleri
- 🪝 Webhook'lar: HTTP callback'leri ile olay bildirimleri
- 🐳 Docker Hazır: Production-ready Docker imajları
📋 İçindekiler
- Hızlı Başlangıç
- Kurulum
- Yapılandırma
- Kullanım Örnekleri
- Docker Dağıtımı
- Dokümantasyon
- API Dokümantasyonu
- İstemci Kütüphaneleri
- Mimari
- Performans
- Katkıda Bulunma
- Lisans
🚀 Hızlı Başlangıç
Docker Kullanarak (En Hızlı)
# Docker Hub'dan en son imajı çekin ve çalıştırın
Docker Compose Kullanarak (Önerilen)
# Repository'yi klonlayın
# Tüm servisleri başlatın
# Logları görüntüleyin
# Demo'ya erişin
Cargo Kullanarak
# Rust'ı yükleyin (henüz yüklü değilse)
|
# Derleyin ve çalıştırın
Not: Yapılandırma dosyasını belirtmek için
--config-fileparametresini kullanın.
📦 Kurulum
Gereksinimler
- Rust 1.75+ (kaynak koddan derleme için)
- Docker & Docker Compose (konteyner dağıtımı için)
- Redis (opsiyonel, kümeleme için)
- PostgreSQL/MySQL/DynamoDB (opsiyonel, uygulama yönetimi için)
Kaynak Koddan
# Repository'yi klonlayın
# Release binary'sini derleyin
# Testleri çalıştırın
# Binary'yi yükleyin
Docker Kullanarak
# İmajı çekin
# Konteyneri çalıştırın
⚙️ Yapılandırma
Temel Yapılandırma
Bir config.json dosyası oluşturun:
Ortam Değişkenleri
# Sunucu yapılandırması
SOKETI_HOST=0.0.0.0
SOKETI_PORT=6001
SOKETI_DEBUG=false
# Uygulama yapılandırması
APP_ID=your-app-id
APP_KEY=your-app-key
APP_SECRET=your-app-secret
# Redis (kümeleme için)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=0
# Metrikler
METRICS_ENABLED=true
METRICS_PORT=9601
Gelişmiş Yapılandırma
Detaylı yapılandırma seçenekleri için [Yapılandırma Kılavuzu]wiki/Yapilandirma) dosyasına bakın:
- Uygulama yönetimi (Array, MySQL, PostgreSQL, DynamoDB)
- Adaptörler (Local, Redis, NATS, Cluster)
- Hız sınırlama ve webhook'lar
- Metrikler ve izleme
- SSL/TLS yapılandırması
💡 Kullanım Örnekleri
Temel Chat Uygulaması
// Pusher istemcisini başlat
const pusher = ;
// Public kanala abone ol
const channel = pusher.;
// Mesajları dinle
channel.;
// Mesaj gönder (istemci olayları etkinleştirilmiş olmalı)
channel.;
Kimlik Doğrulama ile Private Kanallar
// Private kanala abone ol
const privateChannel = pusher.;
// Sunucu tarafı kimlik doğrulama endpoint'i
app.;
Presence Kanalları
// Presence kanalına abone ol
const presenceChannel = pusher.;
// Üye eklendi
presenceChannel.;
// Üye çıkarıldı
presenceChannel.;
// Mevcut üyeleri al
presenceChannel.;
Sunucudan Olay Tetikleme
// Node.js Pusher kütüphanesini kullanarak
const Pusher = require;
const pusher = ;
// Bir olay tetikle
pusher.;
// Birden fazla kanala tetikle
pusher.;
Daha fazla örnek için:
- [Temel Chat Örneği]wiki/Temel-Chat-Ornegi)
- [Kimlik Doğrulama Örnekleri]wiki/Kimlik-Dogrulama-Ornekleri)
- [Özel Kanallar]wiki/Ozel-Kanallar)
- [Presence Kanalları]wiki/Presence-Kanallari)
🐳 Docker Dağıtımı
Tüm deployment dosyaları deployment/ dizininde organize edilmiştir:
deployment/
├── docker/ # Standart Docker deployment
├── nginx/ # Nginx reverse proxy ile
└── caddy/ # Caddy reverse proxy ile (otomatik HTTPS)
Standart Docker Deployment
# Servisleri başlat
# Logları görüntüle
# Servisleri durdur
Nginx ile Production Deployment
# SSL sertifikalarını yapılandır
# .env dosyasını düzenle
# Servisleri başlat
Caddy ile Production Deployment (Otomatik HTTPS)
# Domain yapılandır
# .env dosyasını düzenle
# Servisleri başlat (otomatik SSL!)
Ölçeklendirme
# Soketi instance'larını ölçeklendirin
# Servis durumunu görüntüleyin
İzleme Stack'i ile
# Prometheus ve Grafana ile başlatın
# Grafana'ya erişin
# Varsayılan kimlik bilgileri: admin/admin
Production En İyi Uygulamaları
-
Kümeleme için Redis kullanın:
-
Metrikleri etkinleştirin:
-
Kaynak limitlerini yapılandırın
docker-compose.ymldosyasında -
Otomatik kurtarma için health check'leri kullanın
-
Log toplama ayarlayın (ELK, Loki, vb.)
📚 Dokümantasyon
Kapsamlı dokümantasyon birden fazla dilde mevcuttur:
İngilizce Dokümantasyon
- [Getting Started]wiki/Getting-Started) - Hızlı başlangıç kılavuzu ve temel kavramlar
- [Installation]wiki/Installation) - Detaylı kurulum talimatları
- [Configuration]wiki/Configuration) - Tam yapılandırma referansı
- [Environment Variables]wiki/Environment-Variables) - Ortam değişkenleri yapılandırma rehberi
- [API Reference]wiki/API-Reference) - HTTP ve WebSocket API dokümantasyonu
- [Troubleshooting]wiki/Troubleshooting) - Yaygın sorunlar ve çözümler
Deployment Kılavuzları
- [Vercel Deployment]wiki/Vercel-Deployment) - Vercel'e deployment
- [Netlify Deployment]wiki/Netlify-Deployment) - Netlify'a deployment
- [Reverse Proxy Setup]wiki/Reverse-Proxy-Setup) - HTTP/2 ve HTTP/3 ile Caddy ve Nginx yapılandırması
Kod Örnekleri
- [Basic Chat]wiki/Basic-Chat-Example) - Basit chat uygulaması
- [Authentication]wiki/Authentication-Examples) - Kullanıcı kimlik doğrulama kalıpları
- [Private Channels]wiki/Private-Channels) - Güvenli özel mesajlaşma
- [Presence Channels]wiki/Presence-Channels) - Gerçek zamanlı kullanıcı varlığı
Türkçe Dokümantasyon
- [Başlangıç]wiki/Baslangic) - Hızlı başlangıç kılavuzu ve temel kavramlar
- [Kurulum]wiki/Kurulum) - Detaylı kurulum talimatları
- [Yapılandırma]wiki/Yapilandirma) - Tam yapılandırma referansı
- [Ortam Değişkenleri]wiki/Ortam-Degiskenleri) - Ortam değişkenleri ile yapılandırma rehberi
- [API Referansı]wiki/API-Referansi) - HTTP ve WebSocket API dokümantasyonu
- [Sorun Giderme]wiki/Sorun-Giderme) - Yaygın sorunlar ve çözümler
Deployment Kılavuzları
- [Vercel Deployment]wiki/Vercel-Deployment-TR) - Vercel'e deployment
- [Netlify Deployment]wiki/Netlify-Deployment-TR) - Netlify'a deployment
- [Reverse Proxy Kurulumu]wiki/Reverse-Proxy-Kurulumu) - HTTP/2 ve HTTP/3 ile Caddy ve Nginx yapılandırması
Kod Örnekleri
- [Temel Chat]wiki/Temel-Chat-Ornegi) - Basit chat uygulaması
- [Kimlik Doğrulama]wiki/Kimlik-Dogrulama-Ornekleri) - Kullanıcı kimlik doğrulama kalıpları
- [Özel Kanallar]wiki/Ozel-Kanallar) - Güvenli özel mesajlaşma
- [Presence]wiki/Presence-Kanallari) - Gerçek zamanlı kullanıcı varlığı
İleri Düzey Konular
- [MySQL Kurulumu]wiki/MySQL-Setup) - MySQL uygulama yöneticisi yapılandırması
- [PostgreSQL Kurulumu]wiki/PostgreSQL-Setup) - PostgreSQL uygulama yöneticisi yapılandırması
- [DynamoDB Kurulumu]wiki/DynamoDB-Setup) - DynamoDB uygulama yöneticisi yapılandırması
- [Redis Adaptörü]wiki/Redis-Adapter) - Redis kümeleme kurulumu
- [NATS Adaptörü]wiki/NATS-Adapter) - NATS mesajlaşma entegrasyonu
- [Cluster Adaptörü]wiki/Cluster-Adapter) - Yerel kümeleme
- [Lambda Webhook'ları]wiki/Lambda-Webhooks) - AWS Lambda webhook entegrasyonu
- [SQS Kuyruk Yöneticisi]wiki/SQS-Queue-Manager) - AWS SQS kuyruk yapılandırması
📚 API Dokümantasyonu
WebSocket Bağlantısı
// Pusher.js kullanarak
const pusher = ;
// Kanala abone olun
const channel = pusher.;
// Olayları dinleyin
channel.;
HTTP API
Olay Tetikleme
{
}
Kanalları Getir
Kanal Bilgisi Getir
Tam API dokümantasyonu için [API Referansı]wiki/API-Referansi) dosyasına bakın.
📱 İstemci Kütüphaneleri
Soketi.rs tüm Pusher istemci kütüphaneleriyle uyumludur:
- JavaScript: pusher-js
- Laravel: Laravel Echo
- iOS: pusher-websocket-swift
- Android: pusher-websocket-java
- Python: pusher-http-python
- PHP: pusher-http-php
- Ruby: pusher-http-ruby
- Go: pusher-http-go
🏗️ Mimari
┌─────────────────┐
│ İstemci Uyg. │
│ (Web/Mobil) │
└────────┬────────┘
│ WebSocket
▼
┌─────────────────┐
│ Soketi Sunucu │
│ (Rust) │
└────────┬────────┘
│
┌────┴────┬────────┬─────────┐
▼ ▼ ▼ ▼
┌───────┐ ┌───────┐ ┌──────┐ ┌────────┐
│ Redis │ │ VT │ │Metrik│ │Webhook │
└───────┘ └───────┘ └──────┘ └────────┘
Bileşenler
- WebSocket Sunucusu: İstemci bağlantılarını yönetir
- HTTP API: Olay tetikleme için REST API
- Adaptör: Mesaj dağıtımı (Local/Redis/NATS/Cluster)
- Uygulama Yöneticisi: Uygulama yapılandırması (Array/MySQL/PostgreSQL/DynamoDB)
- Önbellek Yöneticisi: Önbellekleme katmanı (Memory/Redis)
- Hız Sınırlayıcı: İstek hız sınırlama (Local/Redis)
- Kuyruk Yöneticisi: Webhook kuyruğu (Sync/Redis/SQS)
- Metrikler: Prometheus metrik dışa aktarıcı
📊 Performans
Benchmark'lar
- Bağlantılar: Instance başına 100.000+ eşzamanlı bağlantı
- Mesajlar: Saniyede 1M+ mesaj
- Gecikme: <1ms ortalama mesaj gecikmesi
- Bellek: ~50MB temel + bağlantı başına ~1KB
- CPU: Verimli çok çekirdekli kullanım
Optimizasyon İpuçları
- Yatay ölçekleme için Redis adaptörü kullanın
- Bağlantı havuzlamayı etkinleştirin
- Uygun hız limitlerini yapılandırın
- Kalıcılık için SSD depolama kullanın
- İzleme için Prometheus metriklerini etkinleştirin
🧪 Test
# Tüm testleri çalıştır
# Belirli bir testi çalıştır
# Loglama ile çalıştır
RUST_LOG=debug
# Benchmark'ları çalıştır
🤝 Katkıda Bulunma
Katkılar memnuniyetle karşılanır! Detaylar için CONTRIBUTING.md dosyasını okuyun.
Geliştirme Ortamı Kurulumu
# Repository'yi klonlayın
# Bağımlılıkları yükleyin
# Testleri çalıştırın
# Demo'yu çalıştırın
📄 Lisans
Bu proje GPL-3.0 Lisansı altında lisanslanmıştır - detaylar için LICENSE dosyasına bakın.
🙏 Teşekkürler
- Soketi'den ilham alınmıştır
- Tokio ile geliştirilmiştir
- Pusher Protokolü ile uyumludur
📞 Destek
- Dokümantasyon: [English]wiki/Getting-Started) | [Türkçe]wiki/Baslangic)
- Sorunlar: [GitHub Issues]issues)
- Tartışmalar: [GitHub Discussions]discussions)
- Discord: Discord'umuza katılın
Ferdi ÜNAL tarafından ❤️ ile yapıldı