Elixir ve BEAM VM'in gerçek zamanlı uygulamalara uygunluğunu öğrenin: hafif süreçler, OTP denetimi, hata toleransı, Phoenix ve önemli tercihler.

“Gerçek zamanlı” terimi sıkça gevşek kullanılır. Ürün açısından genellikle kullanıcıların güncellemeleri olduğu gibi görmesi—sayfayı yenilemeden ya da arka plan senkronunu beklemeden—anlamına gelir.
Gerçek zamanlılık şu alanlarda kendini gösterir:
Önemli olan algılanan anlıklık: güncellemeler arayüzü canlı hissettirecek kadar hızlı gelmeli ve pek çok etkinlik aktığı halde sistem yanıt veriyor olmalı.
“Yüksek eşzamanlılık”, uygulamanın birçok eşzamanlı etkinliği yönetmesi gerektiği anlamına gelir—sadece ani yüksek trafik değil. Örnekler:
Eşzamanlılık, aynı anda kaç bağımsız görevin yürürlükte olduğu ile ilgilidir, sadece saniyedeki istek sayısı ile değil.
Geleneksel her-bağlantıya-bir iş parçacığı veya ağır iş parçacığı havuzu modelleri sınırlara çarpabilir: iş parçacıkları görece pahalıdır, bağlam değiştirme yük altında artar ve paylaşılan durum kilitlemeleri öngörülemeyen yavaşlamalara neden olabilir. Gerçek zamanlı özellikler ayrıca bağlantıları açık tuttuğu için kaynak kullanımı her istekte serbest bırakılmayıp birikir.
BEAM VM üzerinde çalışan Elixir mucize değildir. İyi bir mimari, akılcı sınırlar ve dikkatli veri erişimi yine gerekir. Ancak aktör-modeli tarzı eşzamanlılık, hafif süreçler ve OTP konvansiyonları ortak ağrıları azaltır—böylece eşzamanlılık arttıkça yanıt veren gerçek zamanlı sistemler kurmak daha kolay olur.
Elixir, gerçek zamanlı ve yüksek eşzamanlı uygulamalar için popülerdir çünkü BEAM virtual machine üzerinde çalışır (Erlang VM). Bu, sadece dil söz dizimini seçmekten daha fazlasıdır: aynı anda çok şey olurken sistemlerin yanıt verebilir kalması için tasarlanmış bir çalışma zamanı seçiyorsunuz demektir.
BEAM'in kökleri telekomünikasyon uygulamalarına dayanır; yazılımın aylarca (veya yıllarca) kesintisiz çalışması beklendiği ortamlarda geliştirilmiştir. Bu gereksinimler Erlang ve BEAM'i öngörülebilir yanıt verebilirlik, güvenli eşzamanlılık ve hatalardan tüm sistemi düşürmeden kurtulabilme gibi pratik hedeflere itti.
Bu “her zaman açık” zihniyet modern ihtiyaçlara—sohbet, canlı gösterge panoları, çok oyunculu özellikler, iş birliği araçları ve akış güncellemeleri—doğrudan taşınır; yani aynı anda çok sayıda kullanıcı ve olay olduğunda işe yarar.
Eşzamanlılığı bir eklenti olarak görmek yerine BEAM, bağımsız çok sayıda etkinliği aynı anda yönetmek için inşa edilmiştir. İşleri VM, bir görevin her şeyi dondurmasını engelleyecek şekilde planlar. Sonuç olarak, sistemler yük altında bile istekleri sunmaya ve gerçek zamanlı güncellemeler göndermeye devam edebilir.
“Elixir ekosistemi” dendiğinde genelde birlikte çalışan iki şey kastedilir:
Bu kombinasyon—Elixir, Erlang/OTP üzerine, BEAM üzerinde çalıştırılınca—daha sonra OTP denetimine ve Phoenix gerçek zamanlı özelliklerine dayanan bölümlerin temelini oluşturur.
Elixir, işletim sistemindeki süreçlerden farklı bir “süreç” fikrine sahip bir VM üzerinde çalışır. Çoğu kişinin süreç veya iş parçacığı dediğinde aklına gelen, işletim sistemi tarafından yönetilen ve her birinin göze çarpan bellek maliyeti olan ağır birimlerdir. BEAM süreçleri ise daha hafiftir: VM tarafından yönetilirler ve binlerce (veya daha fazla) oluşturulmaları uygulamanızın yavaşlamasına neden olmayacak şekilde tasarlanmıştır.
Bir işletim sistemi iş parçacığı, yoğun bir restoranda bir masa ayırmak gibidir: yer kaplar, personel ilgisi gerekir ve her geçen kişi için bir masa ayıramazsınız. BEAM süreci ise bir numara kuponu vermek gibidir: veresiye ucuz, takip etmesi kolay ve kalabalığı büyük masalar olmadan yönetebilirsiniz.
Pratikte bu, BEAM süreçlerinin:
Süreçler ucuz olduğu için Elixir uygulamaları gerçeğe yakın eşzamanlılığı doğrudan modelleyebilir:
Bu tasarım doğal gelir: paylaşılan durum etrafında karmaşık kilit mekanizmaları kurmak yerine her "olan" şeye kendi izole çalışanını verirsiniz.
Her BEAM süreci izoledir: bir süreç kötü veri veya beklenmeyen bir durum yüzünden çöktüğünde diğer süreçleri düşürmez. Tek bir hatalı bağlantı diğer tüm kullanıcıları çevrimdışı bırakmadan başarısız olabilir.
Bu izolasyon, Elixir'in yüksek eşzamanlılık altında dayanmasının ana nedenlerinden biridir: eşzamanlı etkinlik sayısını artırırken hataları lokalize edip kurtarılabilir tutabilirsiniz.
Elixir uygulamaları genelde çok sayıda iş parçacığının aynı paylaşılan veri yapısını dürtmesine dayanmaz. Bunun yerine işi küçük süreçlere böler ve bunlar mesaj göndererek iletişim kurar. Her süreç kendi durumunun sahibidir, dolayısıyla diğer süreçler durumu doğrudan değiştiremez. Bu tek tasarım tercihi, paylaşılan bellek kaynaklı büyük bir hata sınıfını ortadan kaldırır.
Paylaşılan bellekle eşzamanlılıkta, durumu korumak için genelde kilitler, mutex'ler veya diğer koordinasyon araçları kullanırsınız. Bu sıklıkla karmaşık hatalara yol açar: yarış koşulları, kilitlenmeler ve "sadece yük altında başarısız olan" davranışlar.
Mesajlaşmada bir süreç durumu yalnızca mesaj aldığında günceller ve mesajları tek tek işler. Aynı değişken belleğe eşzamanlı erişim olmadığından kilit sırası, içerim veya öngörülemez araya girme gibi konuları daha az düşünürsünüz.
Yaygın bir desen şöyle görünür:
Bu, gerçek zamanlı özelliklere doğal olarak uyar: olaylar akar, süreçler tepki verir ve iş dağıtıldığı için sistem yanıt verir kalır.
Mesajlaşma yüklenmeyi sihirli şekilde engellemez—geri basınç gerekir. Elixir size pratik seçenekler sunar: sınırlı kuyruklar (mailbox büyümesini kısıtla), açıkça akış kontrolü (aynı anda sadece N işleri kabul et), veya işlem sınırlarında bunları uygulayacak boru hattı tarzı araçlar. Önemli olan, bu kontrolleri paylaşılan durum karmaşasına girmeden süreç sınırlarında ekleyebilmenizdir.
“Elixir hata toleranslıdır” dendiğinde genelde kastedilen OTP'dir. OTP tek bir sihirli kütüphane değildir—küçük, izole süreçlerle çalışmanızı ve sistemlerin zarifçe toparlanmasını kolaylaştıran kanıtlanmış desenler ve yapı taşlarıdır.
OTP sizi işi küçük, izole sorumluluklara bölmeye teşvik eder. Bir kere büyük bir servise her şeyin bağlı olduğu tek yapı kurmak yerine, birçok küçük işçi oluşturur ve bunlar başarısız olsa da tüm sistemi düşürmez.
Yaygın işçi tipleri:
Supervisor'lar başka süreçleri başlatmak, izlemek ve yeniden başlatmakla görevli süreçlerdir. Bir işçi çöktüğünde—kötü bir girdi, zaman aşımı veya geçici bağımlılık sorunu yüzünden—supervisor seçtiğiniz bir stratejiye göre yeniden başlatır (tek bir işçi, bir grup, tekrarlı hatalarda geri çekilme vb.).
Böylece supervision tree ortaya çıkar; hatalar izole edilir ve kurtarma öngörülebilir hale gelir.
"Let it crash" her hatayı görmezden gelmek demek değildir. Anlamı:
Bunun sonucu, bireysel parçalar bozulsa bile kullanıcılara hizmet vermeye devam eden bir sistemdir—gerçek zamanlı, yüksek eşzamanlı uygulamalarda istediğiniz davranış budur.
Çoğu web ve ürün bağlamında “gerçek zamanlı” genelde soft real-time anlamındadır: kullanıcılar sistemin yeterince hızlı yanıt vermesini bekler—sohbet mesajları hemen görünmeli, panolar akıcı güncellenmeli, bildirimler bir-iki saniye içinde gelmeli. Ara sıra yavaş yanıtlar olabilir ama gecikmeler yük altında sıklaşırsa güven azalır.
Elixir BEAM VM üzerinde çalışır; burada ana yapı çok sayıda küçük, izole süreç etrafındadır. BEAM'in preemptive scheduler'ı iş parçalarını küçük zaman dilimlerine böler; böylece tek bir kod parçası uzun süre CPU'yu tutamaz. Binlerce (veya milyonlarca) eşzamanlı etkinlik varken—web istekleri, WebSocket itmeleri, arka plan işleri—zamanlayıcı bunların arasında döner ve her birine sıra verir.
Bu, Elixir sistemlerinin trafik arttığında bile genellikle “hızlı” hissetmesinin önemli bir nedenidir.
Geleneksel yığınlar OS iş parçacıkları ve paylaşılan belleğe ağırca dayanır. Yük altında iş parçacığı rekabeti ortaya çıkabilir: kilitler, bağlam değiştirme maliyeti ve isteklerin kuyrukta birikmesi. Sonuç genellikle yüksek tail latency—ortalama iyi görünürken rastgele birkaç saniyelik duraklamalar—olur. Bu kullanıcıları rahatsız eder.
BEAM süreçleri paylaşılmış bellek yerine mesajlaşma kullandığından birçok darboğazdan kaçınabilir. Yine de iyi mimari ve kapasite planlaması gerekir; ama çalışma zamanı yük arttıkça gecikmeyi daha öngörülebilir tutmaya yardım eder.
Soft real-time Elixir için uygundur. Hard real-time—bir sürenin kaçırılmasının kabul edilemez olduğu (tıbbi cihazlar, uçuş kontrolü, bazı endüstriyel denetleyiciler) durumlar genelde özel işletim sistemleri, diller ve doğrulama yaklaşımları gerektirir. Elixir bu ekosistemlere katılabilir ama sıkı garanti gerektiren çekirdek işler için nadiren ana araçtır.
Phoenix genelde Elixir üzerinde gerçek zamanlı katman olarak tercih edilir. Binlerce istemci aynı anda bağlıyken bile canlı güncellemeyi basit ve öngörülebilir tutmak üzere tasarlanmıştır.
Phoenix Channels, WebSocket (veya gerekirse long-polling) kullanımı için yapılandırılmış bir yol sunar. İstemciler bir konuya katılır (ör. room:123) ve sunucu o konuya bağlı herkese olay itebilir veya bireysel mesajlara yanıt verebilir.
Elle yazılmış WebSocket sunucularının aksine, Channels mesaj tabanlı temiz bir akışı teşvik eder: join, handle events, broadcast. Bu, sohbet, canlı bildirimler ve iş birliği düzenlemelerinin callback yumağına dönüşmesini engeller.
Phoenix PubSub, uygulamanızın parçalarının olay yayınlayıp diğer parçaların abone olmasına izin veren dahili "yayın otobüsüdür"—yerel olarak veya cluster genişlediğinde düğümler arası.
Gerçek zamanlı güncellemeler genellikle soket süreci tarafından tetiklenmez. Bir ödeme tamamlanır, sipariş durumu değişir, bir yorum eklenir—PubSub bu değişikliği yayınlayarak ilgili herkese (channels, LiveView süreçleri, arka plan işler) bağımsız şekilde iletir.
Presence, kimlerin bağlı olduğunu ve ne yaptıklarını takip etmek için Phoenix'in yerleşik desenidir. Çevrimiçi kullanıcı listeleri, yazıyor göstergeleri ve aktif düzenleyiciler için sık kullanılır.
Basit bir ekip sohbetinde her oda room:42 gibi bir konu olabilir. Bir kullanıcı mesaj gönderdiğinde sunucu mesajı saklar ve PubSub ile yayınlar; böylece bağlı herkes anında görür. Presence kimlerin odada olduğunu ve yazıp yazmadığını gösterir; ayrıca notifications:user:17 gibi ayrı bir konu kullanıcıya özel uyarıları gerçek zamanlı itebilir.
Phoenix LiveView, mantığın çoğunu sunucuda tutarak etkileşimli gerçek zamanlı arayüzler oluşturmanızı sağlar. Büyük bir tek sayfa uygulaması göndermek yerine LiveView, HTML'i sunucuda render eder ve küçük UI güncellemelerini kalıcı bir bağlantı üzerinden gönderir; tarayıcı bu güncellemeleri anında uygular.
Gerçeğin kaynağı sunucuda kaldığı için klasik karmaşalar azalır:
LiveView, veri değiştiğinde bir tabloyu güncellemek, canlı ilerleme göstermek veya varlık durumunu yansıtmak gibi gerçek zamanlı özellikleri normal sunucu-tabanlı akışın bir parçası haline getirdiği için genelde basit hissettirir.
LiveView, yönetim panoları, iç araçlar, CRUD uygulamaları ve form-ağırlıklı iş akışları için çok uygundur; doğruluk ve tutarlılık önemli olduğunda güçlüdür. Daha küçük bir JavaScript ayak izi ile modern etkileşim istiyorsanız iyi bir tercih olabilir.
Ürününüz çevrimdışı öncelikli davranış gerektiriyorsa, bağlantısızken yoğun iş yapılacaksa veya karmaşık istemci tarafı çizimi (canvas/WebGL, yoğun animasyonlar, derin native-benzeri etkileşimler) gerekiyorsa, daha zengin bir istemci uygulaması (veya native) daha uygun olabilir—muhtemelen Phoenix'i API ve gerçek zamanlı arka uç olarak kullanarak.
Gerçek zamanlı bir Elixir uygulamasını ölçeklendirmenin başlangıç sorusu genelde şudur: aynı uygulamayı birden çok düğümde çalıştırıp bunları tek sistem gibi davranır hale getirebilir miyiz? BEAM tabanlı kümelemede cevap sıklıkla “evet”tir—aynı anda birkaç özdeş düğüm ayağa kaldırabilir, bunları bir kümeye bağlayabilir ve trafiği bir yük dengeleyici ile dağıtabilirsiniz.
Küme, birbirleriyle konuşabilen Elixir/Erlang düğümlerinin setidir. Bağlandıklarında mesaj yönlendirebilir, işi koordine edebilir ve belirli hizmetleri paylaşabilirler. Prod ortamda kümeleme genelde servis keşfi (Kubernetes DNS, Consul vb.) ile düğümlerin birbirini otomatik bulması üzerine kurulur.
Gerçek zamanlı özellikler için dağıtık PubSub büyük önem taşır. Phoenix'te bir kullanıcı Node A'ya bağlı iken Node B'de tetiklenen bir güncelleme gerektiğinde, PubSub köprü görevi görür: yayınlar küme boyunca çoğaltılır, böylece her düğüm kendi bağlı istemcilerine güncelleme itebilir.
Bu, gerçek yatay ölçeklemeyi mümkün kılar: düğüm eklemek toplam bağlantı sayısını ve throughput'u artırır, gerçek zamanlı teslimatı bozmadan.
Elixir, durumu süreç içinde saklamayı kolaylaştırır—ama ölçeklendikçe kasıtlı olmak gerekir:
Çoğu ekip releases ile dağıtır (genelde konteyner içinde). Sağlık kontrolleri (liveness/readiness) ekleyin, düğümlerin keşfedilip bağlanabildiğinden emin olun ve düğümlerin kümeye düşmeden katılabildiği/ayrılabildiği rolling deploy stratejileri planlayın.
Elixir, aynı anda çok sayıda "küçük sohbetin" gerçekleştiği durumlarda güçlüdür—çok sayıda bağlı istemci, sık güncellemeler ve parçalar bozulduğunda bile yanıt vermeye devam etme ihtiyacı.
Sohbet ve mesajlaşma: Binlerce ile milyonlara uzanan uzun ömürlü bağlantılar yaygındır. Elixir'in hafif süreçleri “kullanıcı/oda başına bir süreç” modeline doğal uyarak fan-out (bir mesajı birçok alıcıya gönderme) işlerini hızlı tutar.
İş birliği (dokümanlar, beyaz tahtalar, presence): Gerçek zamanlı imleçler, yazıyor göstergeleri ve durum senkronizasyonu sürekli güncellemeler üretir. Phoenix PubSub ve süreç izolasyonu, güncellemeleri kilit yumağına dönüştürmeden verimli şekilde yayınlamaya yardımcı olur.
IoT alımı ve telemetri: Cihazlar sürekli küçük olaylar gönderir ve trafik ani yükselme gösterebilir. Elixir yüksek bağlantı sayılarını ve geri basınç dostu boru hattı düzenlerini iyi idare eder; OTP denetimi bir bağımlılık arızalandığında kurtarmayı öngörülebilir kılar.
Oyun arka uçları: Eşleştirme, lobiler ve maç başına durum birçok eşzamanlı oturum içerir. Elixir hızlı, eşzamanlı durum makinelerini (genelde “maç başına bir süreç”) destekler ve patlama anlarında tail latency'yi kontrol altında tutabilir.
Finansal uyarılar ve bildirimler: Güvenilirlik hız kadar önemlidir. Elixir'in hata toleranslı tasarımı ve supervision ağaçları, harici servisler zaman aşımına uğrasa bile işlemeye devam eden sistemleri destekler.
Sor:
Hedefleri erken tanımlayın: throughput (olay/saniye), gecikme (p95/p99) ve bir hata bütçesi (kabul edilebilir hata oranı). Elixir, bu hedefler sıkı olduğunda ve yük altında karşılanması gerektiğinde parlamaya eğilimlidir—sadece sessiz bir staging ortamında değil.
Elixir, çok sayıda eşzamanlı, çoğunlukla I/O-bağımlı iş için mükemmeldir—WebSocket'ler, sohbet, bildirimler, orkestrasyon, olay işleme. Ancak evrensel en iyi seçim değildir. Takasları bilmek Elixir'i optimize olmadığı sorunlara zorlamaktan kaçındır.
BEAM, yanıt verebilirlik ve öngörülebilir gecikmeyi önceliklendirir; bu, gerçek zamanlı sistemler için idealdir. Ham CPU verimi gereken işler—video kodlama, yoğun sayısal hesaplama, büyük ölçekli ML eğitimleri—diğer ekosistemler daha iyi eşleşebilir.
Elixir sisteminde CPU-ağır işler gerekiyorsa yaygın yaklaşımlar:
Elixir kendine özgü ama erişilebilir; OTP kavramları—süreçler, supervisorlar, GenServer'lar, geri basınç—zaman alarak içselleştirilir. Request/response web yığınlarından gelen takımların BEAM tarzında tasarım yapmayı öğrenmesi için bir adaptasyon süresi gerekebilir.
Bölgelere göre işe alım bazı yerlerde daha yavaş olabilir; birçok ekip dahili eğitim veya deneyimli mentor eşleştirmesi planlar.
Temel araçlar güçlüdür, fakat bazı alanlarda (belirli kurumsal entegrasyonlar, niş SDK'lar) Java/.NET/Node kadar olgun kütüphane olmayabilir. Daha fazla ara kod yazmanız veya wrapper sürdürmeniz gerekebilir.
Tek bir düğümü çalıştırmak basit; kümeleme karmaşıklık katar: keşif, ağ bölünmeleri, dağıtık durum ve dağıtım stratejileri. Gözlemlenebilirlik iyi olsa da izleme, iz sürme ve log korelasyonu için bilinçli bir kurulum gerekebilir. Eğer organizasyonunuz kutudan çıkan, çok az özelleştirme gerektiren operasyonel çözümler istiyorsa, daha geleneksel bir yığın daha basit olabilir.
Eğer uygulamanız gerçek zamanlı değilse, eşzamanlılığı düşükse ve çoğunlukla sade CRUD ise, ekibinizin zaten bildiği yaygın bir çerçeveyi seçmek genelde en hızlı yol olacaktır.
Elixir'e geçiş büyük bir yeniden yazım olmak zorunda değil. En güvenli yol küçük başlamak, bir gerçek zamanlı özellikle değeri kanıtlamak ve oradan büyümektir.
Pratik bir ilk adım, gerçek zamanlı davranışı gösteren küçük bir Phoenix uygulaması yapmaktır:
Kapsamı dar tutun: tek bir sayfa, tek bir veri kaynağı, net bir başarı metriği (ör. “1.000 bağlı kullanıcı için güncellemeler 200ms içinde görünsün”). Hızlı kurulum ve kavramlar için /docs bölümünden başlayın.
Eğer ürün deneyimini doğrulamadan tam BEAM yığınına geçmek istemiyorsanız, çevre öğeleri hızlıca prototiplemek de yardımcı olur. Örneğin ekipler genelde Koder.ai gibi platformları kullanıp React ön yüz, Go + PostgreSQL arka uç ile hızla çalışabilir; sonra ihtiyaçlar netleştikçe Elixir/Phoenix gerçek zamanlı bileşenini entegre eder veya yerine koyar.
Küçük bir prototipte bile uygulamayı her kullanıcı/oda/akış için izole süreçlerde çalışacak şekilde yapılandırın. Bu, neyin nerede çalıştığını ve bir şey hata verdiğinde ne olacağını anlamayı kolaylaştırır.
Erken süpervizyon ekleyin; anahtar işçileri bir supervisor altında başlatmak, yeniden başlatma davranışlarını tanımlamak ve tek bir “mega süreç” yerine küçük işçiler tercih etmek temel bir pratiktir. Bu, Elixir'in farklı hissettirdiği yerdir: hataların olacağını varsayar ve onları kurtarılabilir kılarsınız.
Zaten başka bir dilde çalışan bir sisteminiz varsa yaygın göç şablonu:
Feature flag'ler kullanın, Elixir bileşenini paralel çalıştırın ve gecikmeyi ile hata oranlarını izleyin. Üretim kullanımını değerlendirmek için destek ve planlara bakmak isterseniz /pricing bölümünü kontrol edin.
Eğer değerlendirme sırasında benchmark, mimari notlar veya eğitim materyalleri paylaşırsanız, Koder.ai'nin earn-credits programı içerik oluşturup diğer kullanıcıları yönlendirdiğinizde araç maliyetlerinizi dengeleyebilir.
"Gerçek zamanlı" çoğu ürün bağlamında soft real-time demektir: güncellemeler kullanıcı arayüzünün canlı hissetmesi için yeterince hızlı gelir (genellikle birkaç yüz milisaniyeden bir-iki saniyeye kadar), sayfayı elle yenilemeden.
Bu, bir son teslim tarihinin kabul edilemez olduğu ve genellikle özel sistemler gerektiren hard real-time'dan farklıdır.
Yüksek eşzamanlılık, aynı anda kaç bağımsız etkinliğin gerçekleştiğiyle ilgilidir; sadece saniyedeki istek sayısı değildir.
Örnekler:
Bağlantı başına iş parçacığı tasarımları zorlanabilir çünkü iş parçacıkları görece maliyetlidir ve eşzamanlılık arttıkça yük artar.
Yaygın sorunlar:
BEAM süreçleri VM tarafından yönetilen ve hafif süreçlerdir; çok büyük sayılarda oluşturulmak için tasarlanmıştır.
Pratikte bu, "bağlantı/kullanıcı/görev başına bir süreç" gibi modelleri mümkün kılar; böylece gerçek zamanlı sistemleri ağır paylaşılan durum kilitlemeleri olmadan daha kolay modelleyebilirsiniz.
Mesajlaşma ile her süreç kendi durumunun tek sahibi olur ve diğer süreçler durumu doğrudan değiştiremez—sadece mesaj gönderir.
Bu, klasik paylaşılan bellek sorunlarını azaltır, örneğin:
Tetikleme hacmi arttığında yükü hafifletmek için sürecin sınırlarında geri basınç uygulayabilirsiniz; böylece sistem çökmeden kademeli olarak bozulur.
Yaygın teknikler:
OTP, hatalardan kurtulan uzun süre çalışan sistemler için kurallar ve yapı taşları sunar.
Önemli bileşenler:
“Let it crash” hataları görmezden gelmek anlamına gelmez. Bunun yerine her işçide aşırı savunmacı kod yazmaktan kaçınırsınız ve supervisor'lara temiz bir durumu geri getirme görevini bırakırsınız.
Pratik olarak:
Phoenix gerçek zamanlı özellikleri genellikle üç araç etrafında toplanır:
LiveView, UI durumunun ve mantığının çoğunu sunucuda tutar ve kalıcı bir bağlantı üzerinden küçük fark güncellemeleri gönderir.
Canlı hissettiren deneyimler için iyi bir seçimdir ve özellikle:
Çevrimdışı öncelikli uygulamalar veya ağır müşteri tarafı çizimi (canvas/WebGL) gerektiren durumlar için genelde uygun değildir.