Modern web uygulamalarının çoğu, bir noktada gerçek zamanlı özelliklere ihtiyaç duyar. Canlı bildirimler, sohbet, varlık göstergeleri, işbirlikçi düzenleme. Bu ihtiyacınız olduğunda, çoğu kaynak Pusher’a yönlendirir.
Pusher gerçekten iyi bir çözümdür. Çalışır, iyi belgelenmiştir ve geliştirici deneyimi oldukça sağlamdır. Ancak, gerçek trafik aldıkça fiyatı yüksek gelebilir. Ücretsiz katmanda 100 eşzamanlı bağlantı vardır. 500 eşzamanlı bağlantı için aylık 49 USD talep eder. Fatura, uygulamanızın ölçeklenmesinden daha hızlı bir şekilde yükselmektedir.
WebSockets teknolojisi açık ve iyi anlaşılmıştır; yıllardır bu alandadır. Dolayısıyla, kaliteli bir kendinize ait barındırılabilir alternatifin yok olmasını engelleyen bir sebep yoktu.
Bu nedenle, bir çözüm geliştirdim.
Relay Tanıtımı
Relay, Go ile yazılmış açık kaynaklı, kendinize ait barındırabileceğiniz bir WebSocket sunucusudur. Pusher’ın sunduğu tüm özellikleri, yalnızca sahip olduğunuz altyapıda küçük bir sunucu işlemi çalıştırarak edinirsiniz.
Tasarımda önemli bir karar, Pusher protokolü ile tam uyumluluktur. Eğer hali hazırda Pusher kullanıyorsanız, sadece bir ortam değişkeni değiştirerek Relay’e geçiş yapabilirsiniz. SDK değişiklikleri, yeniden yapılandırma veya taşınma betiği yoktur. Sadece uygulamanızı Relay sunucunuza yönlendirin.
30 Saniyede Başlayın
docker run -d -p 6001:6001 \
-e RELAY_APP_KEY=my-key \
-e RELAY_APP_SECRET=my-secret \
darknautica/relay:latest
Bu satırların tamamı sunucu kurulumunu içerir. 6001 portunda başlar, /dashboard adresinde bir canlı gösterge panosu sunar ve WebSocket bağlantılarını kabul etmeye hazırdır.
JavaScript ile Bağlanma
import Relay from '@relayhq/relay-js'
const relay = new Relay('my-key', {
host: 'your-server.com',
port: 6001,
})
const channel = relay.subscribe('notifications')
channel.bind(new-notification, (data) => {
console.log(data.message)
})
Laravel ile Yayınlama
composer require relayhq/relay-php
// config/broadcasting.php
'default' => ,
'connections' => [
'relay' => [
'driver' => ,
'host' => env(, ),
'port' => env(, 6001),
'key' => env(),
'secret' => env(),
],
],
Sonrasında mevcut yayın olaylarınız çalışmaya devam eder.
broadcast(new OrderShipped($order));
Desteklediği Özellikler
- Kamusal, özel ve varlık kanalları
- Özel ve varlık kanalları için HMAC kimlik doğrulama
- Arka uç olay yayınlama için HTTP API
- Canlı bağlantı istatistikleri ve olay kaydı ile yerleşik web gösterge panosu
- Yeniden bağlanan istemciler için kanal geçmişi ve tekrar oynatma
- HMAC imzalı yüklerle Webhook’lar
- apps.json ile çoklu uygulama desteği
- Rate limiting ve kibar kapatma
- Laravel, Node.js, Rails ve Django için resmi SDK’lar
- Tek ikili dosya – runtime, JVM veya Node gereksinimi yok
Önemli Karşılaştırma
Pusher’ın ücretsiz katmanı, size 100 eşzamanlı bağlantı ve günlük 200k mesaj sunmaktadır. Relay ise, bir 5 USD/aylık VPS maliyeti karşılığında sınırsız her şeyi sunmaktadır.
300 eşzamanlı kullanıcıya sahip bir başlangıç için, bu durum 0 USD ile 49 USD/ay arasında bir fark yaratır. Yıllık olarak bu, 588 USD anlamına gelir – bu, tüm yıl için sunucu maliyetinden fazladır.
Deneyin
Proje MIT lisanslıdır ve GitHub’da yer almaktadır. Windows, Mac ve Linux için önceden hazırlanmış ikili dosyalar salgın sayfasında mevcuttur. Bir Docker imajı Docker Hub’da yayınlanmıştır.
GitHub: https://github.com/DarkNautica/Relay
Belgeler: https://darknautica.github.io/Relay
Docker: darknautica/relay
Pusher fiyatlandırma engeli ile baş etmiş olanlar için geri bildirim almak isterim. Go mimarisi veya protokol uygulaması hakkında sorularınıza memnuniyetle yanıt veririm.
Kaynak: Orijinal Makale


