Uygulamanızın kendilerine bir şey söylemesini bekleyen üç tür kullanıcı vardır: sayfaya bakmakta olan, kurumsal proxy'si bir WebSocket'i geçirmeyen, ve tarayıcıyı iki saat önce kapatmış olan. sgcWebSockets 2026.10 üçünü de kapsıyor.
WebSocket'i Geçirmeyen Proxy
Server-Sent Events düz HTTP'dir: açık kalan bir GET ve bir metin akışı. Yol üzerindeki hiçbir şey buna itiraz edemez. sgcHTML motoru artık güncellemelerini bir WebSocket yerine bu şekilde taşıyabilir, ve sayfaya kendi kendine karar vermesi söylenebilir:
FEngine.SSE.Enabled := True;
FEngine.SSE.Endpoint := '/events';
FEngine.SSE.PostEndpoint := '/events/send';
FEngine.SSE.ReplaySize := 100;
FTemplate.Transport := htAuto; { htWebSocket, htSSE or htAuto }
htAuto ile sayfa bir WebSocket açar ve bunu yapamadığında kendiliğinden olay akışına geri döner. Yeniden oynatma tamponu, bir an bağlantısı kesilen bir okuyucunun, uzaktayken kaçırdığı güncellemeleri, bir boşluk yerine, alması anlamına gelir.
Altını çizmeye değer kısım şu: bu, düz HTTP sunucusuyla çalışır. Bir sayfaya güncelleme göndermek artık WebSocket sunucusunu hiç gerektirmiyor.
Tarayıcıyı Kapatan Kullanıcı
Web Push, sayfanızda olmayan bir tarayıcıya, hatta çalışmakta bile olmayan bir tarayıcıya ulaşır. Sayfa abone olur, uygulamanız aboneliği verilerini nerede tutuyorsa orada saklar, ve tek bir çağrı bildirimi gönderir:
uses
sgcHTML_WebPush;
FWebPush := TsgcHTMLWebPush.Create(Self);
FWebPush.Enabled := True;
FWebPush.VAPIDPublicKey := ReadSetting('vapid.public');
FWebPush.VAPIDPrivateKey := ReadSetting('vapid.private');
FWebPush.Subject := 'mailto:info@example.com';
FWebPush.OnSaveSubscription := DoSaveSubscription;
FWebPush.OnLoadSubscriptions := DoLoadSubscriptions;
FWebPush.OnDeleteSubscription := DoDeleteSubscription;
FEngine.WebPush := FWebPush;
FWebPush.Send('user-42', 'Order 1042 shipped',
'It left the warehouse this morning.', '/orders/1042');
Kütüphane protokole sahiptir: şifrelenmiş yük, VAPID imzası, TTL ve aciliyet başlığı. Uygulamanız depolamaya, üç olay aracılığıyla sahiptir, çünkü aboneliklerin nerede yaşadığı yalnızca sizin verebileceğiniz bir karardır. Push hizmetinin devre dışı bıraktığı bir abonelik, onu bırakabilmeniz için OnSubscriptionExpired aracılığıyla geri döner.
İkisi Arasında Karar Veren Bileşen
İki kanala sahip olmak, yalnızca bir şey aralarında seçim yaparsa işe yarar. Bildirim bileşeni artık bunu yapıyor: sayfaya bakmakta olan bir kullanıcı bildirimi sayfanın içinde alır, bakmayan biri ise, uygulama buna izin verildiğini söylediğinde bir web push alır. Bir bildirim, bir çağrı, ve kullanıcıya iki kez söylenmez.
Ve Onun Çevresindeki İki Bileşen
Bir bildirim gelen kutusu. Okunmamış rozeti olan bir zil ve bir kullanıcının bildirimleri, okundu işaretleme ve temizleme ile birlikte, böylece kaçırılan bir bildirim kaybolmuş bir bildirim olmaz.
Bir bildirim tercihleri tablosu. Bir insanın her bildirim türünün kendisine nasıl ulaşacağını işaretlediği yer. Herkesin ertelediği kısım, ve push bildirimi almak istemeyen insanlarla başınızı derde sokmaktan sizi kurtaran kısım.
İkisi de her sürümde, WebSocket üzerinden veya Server-Sent Events üzerinden çalışır.
Sürümler
Server-Sent Events, gelen kutusu ve tercihler tablosu sgcHTML'in bir parçasıdır. Kapalı bir tarayıcıya ulaşan kısım olan Web Push'un kendisi ise SGC_WEBPUSH'a ihtiyaç duyar; bu da Enterprise ve All-Access sürümleridir.
Yükseltme
Buradaki her şey varsayılan olarak kapalıdır. Mevcut bir sayfa, siz Transport'u ayarlayana, bir WebPush atayana veya iki yeni bileşenden birini bir forma bırakana kadar WebSocket taşıma yöntemini korur ve aynı işaretlemeyi işler.
Sırada Ne Var
- Delphi Uygulamanızı ChatGPT ve Claude İçinde Çalıştırın
- Bir Ekran Görüntüsünü Delphi Web Sayfasına Dönüştürün
- sgcWebSockets 2026.10, bu sürümdeki diğer her şey
İzleyin
Bununla ilgili kısa bir video, eSeGeCe kanalında yer alıyor.
Sorularınız, geri bildiriminiz veya taşıma konusunda yardıma mı ihtiyacınız var? İletişime geçin — kodu yazan kişilerden yanıt alacaksınız.
