folder Tahribat.com Forumları
linefolder Html - CSS - XML - JavaScript - Ajax
linefolder Ajax Ve Laravel İle Pessimistic Locking



Ajax Ve Laravel İle Pessimistic Locking

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trnight
    trnight's avatar
    Kayıt Tarihi: 21/Ocak/2013
    Erkek

    Müritler Merhaba,

     

    Bir proje üzerinde düşünmekteyim orada şöyle bir nokta takıldı kafama. Senaryo şu şekilde sinema bilet satışı için bir web sitesi olsun. Kullanıcı gelip buradan online olarak bilet alacak. Kullanıcının biri gelip 5A koltuğuna tıkladığında diğer her kullanıcı için bu koltuğu 5 dk süre için kilitleyecek ve satma işlemini yapmayacak. 5 dakikanın sonunda bu koltuktaki kilidi kaldıracak. 

    Backend olarak PHP-Laravel kullanmayı düşünüyorum. Frontend'de ise Js-Jquery gibi düşünüyorum. Bu koltuk kilitleme olayında backend kısmında kendim bir tabloya her koltuk seçildiğinde bir satır mı ekletmeliyim(5A koltuk kilitlendi) yoksa Laravel'in bunun için bir çözümü var mı? Diğer ve asıl kafama takılan kısmı ise Frontend tarafı. Burada aklımda olan iki senaryo var;

    1. Ajax ile mesela her 30 saniyede bir istek gönderip kontrol ettirmek ve dom manipilasyonu ile koltukları kilitlemek. (İstek sayısı çok fazla mı olur? Performans çok mu kötü olur?)

    2. Ajax ile her 3-5 dk'de bir kontrol yaptırıp. Ek olarak bir de kullanıcı koltuk seçimi yaptığında kontrol ettirmek. 

     

    Frontend kısmındaki kontrolde Ajax sizce mantıklı olur mu? Kullanabileceğim bşka bir alternatif var mı?

    Biraz dağınık yazdım galiba ama soruları anladığınızı düşünüyorum :) Backend ve Frontend kısmında sorularımı cevaplayıp, yorumlayabilir misiniz? 

     

    Şimdiden teşekkürler müritler. 


    Bilgi güçtür...
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo

    koltuğu tuttuğun tabloya locked_at, locked_user diye bir field ekle, frontendde adam koltuk seçince o koltuğun locked_at  fieldına o anki tarih-saati, diğer fielda da session id yi yaz.

    kullanıcı başka bir koltuk seçerse önce gidip o session_id ile kilitlenmiş bir koltuk varmı ona bak, varsa onu sil. (update koltuklar set locked_at = null where session_id = $session_id), koltuğu öyle kitle.

    sonra laravelde bir cron job olustur, her dakika çalışsın ve db yi gezip 5 dakikadan daha eski kilitlenmiş koltukları silsin.

    frontende bi geri sayım sayacı ekleyebilirsin.

    eğer backend koltuğu sildiğinde front ende bildirim atmak istiyosan : 

    front endde koltuğu kilitlerken session id ile bi pusher channelı oluştur, ve onu dinlemeye başla (başka koltuk seçilirse eskisini dinlemeyi bırakırsın tabi)

    backenddeki cron jobun 5 dakikadan eski bir locku silerken aynı zamanda event broadcast etsin, böylece front endi haberdar etmiş olursun.

    bkz : 

    pusher.com

    https://laravel.com/docs/8.x/broadcasting

    https://laravel.com/docs/8.x/scheduling

    eventlerin çalışması için queue workerın arkada çalışması gerekiyor, eğer çalıştıramıyorsan(mesela shared hostingdeysen) laravel echo kullanmadan pusher api ye pushlamayı falan deneyebilirisn 

    edit: ben olsam böyle yaparım daha kısa çözümlerde olabilir.

    yolbulucu tarafından 11/Nis/21 20:12 tarihinde düzenlenmiştir

    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    shock56
    shock56's avatar
    Kayıt Tarihi: 31/Mart/2007
    Erkek
    trnight bunu yazdı

    Müritler Merhaba,

     

    Bir proje üzerinde düşünmekteyim orada şöyle bir nokta takıldı kafama. Senaryo şu şekilde sinema bilet satışı için bir web sitesi olsun. Kullanıcı gelip buradan online olarak bilet alacak. Kullanıcının biri gelip 5A koltuğuna tıkladığında diğer her kullanıcı için bu koltuğu 5 dk süre için kilitleyecek ve satma işlemini yapmayacak. 5 dakikanın sonunda bu koltuktaki kilidi kaldıracak. 

    Backend olarak PHP-Laravel kullanmayı düşünüyorum. Frontend'de ise Js-Jquery gibi düşünüyorum. Bu koltuk kilitleme olayında backend kısmında kendim bir tabloya her koltuk seçildiğinde bir satır mı ekletmeliyim(5A koltuk kilitlendi) yoksa Laravel'in bunun için bir çözümü var mı? Diğer ve asıl kafama takılan kısmı ise Frontend tarafı. Burada aklımda olan iki senaryo var;

    1. Ajax ile mesela her 30 saniyede bir istek gönderip kontrol ettirmek ve dom manipilasyonu ile koltukları kilitlemek. (İstek sayısı çok fazla mı olur? Performans çok mu kötü olur?)

    2. Ajax ile her 3-5 dk'de bir kontrol yaptırıp. Ek olarak bir de kullanıcı koltuk seçimi yaptığında kontrol ettirmek. 

     

    Frontend kısmındaki kontrolde Ajax sizce mantıklı olur mu? Kullanabileceğim bşka bir alternatif var mı?

    Biraz dağınık yazdım galiba ama soruları anladığınızı düşünüyorum :) Backend ve Frontend kısmında sorularımı cevaplayıp, yorumlayabilir misiniz? 

     

    Şimdiden teşekkürler müritler. 

    Laravel ile yazılmış şöyle bir script var. Belki işine yarar 

    https://github.com/mwlmalimi/bus-reservation

    Ayrıca laravel kullanacaksan jquery yerine livewire ve alpin.js kullanmanı tavsiye ederim. İşini ciddi derecede kolaylaştırır. 

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek

    imkanın varmı bilmem fakat

    node.js ve socket.io kullanabilirsin


    |sadece aptalların başarısı ders notu ile ölçülür|
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gececi
    NighT_JudGe
    NighT_JudGe's avatar
    Kayıt Tarihi: 09/Aralık/2008
    Erkek

    yolbulucu nun çözümü  gayet mantıklı 


    Cahildim Dünyanın Rengine Kandım
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trnight
    trnight's avatar
    Kayıt Tarihi: 21/Ocak/2013
    Erkek
    yolbulucu bunu yazdı

    koltuğu tuttuğun tabloya locked_at, locked_user diye bir field ekle, frontendde adam koltuk seçince o koltuğun locked_at  fieldına o anki tarih-saati, diğer fielda da session id yi yaz.

    kullanıcı başka bir koltuk seçerse önce gidip o session_id ile kilitlenmiş bir koltuk varmı ona bak, varsa onu sil. (update koltuklar set locked_at = null where session_id = $session_id), koltuğu öyle kitle.

    sonra laravelde bir cron job olustur, her dakika çalışsın ve db yi gezip 5 dakikadan daha eski kilitlenmiş koltukları silsin.

    frontende bi geri sayım sayacı ekleyebilirsin.

    eğer backend koltuğu sildiğinde front ende bildirim atmak istiyosan : 

    front endde koltuğu kilitlerken session id ile bi pusher channelı oluştur, ve onu dinlemeye başla (başka koltuk seçilirse eskisini dinlemeyi bırakırsın tabi)

    backenddeki cron jobun 5 dakikadan eski bir locku silerken aynı zamanda event broadcast etsin, böylece front endi haberdar etmiş olursun.

    bkz : 

    pusher.com

    https://laravel.com/docs/8.x/broadcasting

    https://laravel.com/docs/8.x/scheduling

    eventlerin çalışması için queue workerın arkada çalışması gerekiyor, eğer çalıştıramıyorsan(mesela shared hostingdeysen) laravel echo kullanmadan pusher api ye pushlamayı falan deneyebilirisn 

    edit: ben olsam böyle yaparım daha kısa çözümlerde olabilir.

    Hocam teşekkürler öncelikle. Pusher'ı araştırdım mantıklı geldi. Fakat şöyle bir şey geliyor aklıma. Örnek senaryo: kullanıcı koltuk adımına geldi, 10 koltuk var 3'ü kilitli. Kullanıcı bir koltuğu seçtiğinde broadcast geçip diğer kullanıcıları haberdar eder diğer kullanıcılardaki o koltuğu da kilitlerim. Bu sayede her kullanıcı için 10 saniyede bir kontrol yapmama gerek kalmaz. Garantiye almak için de 5 dakika da bir cron job çalıştırıp yine bir broadcast geçerim bütün kullanıcılardaki koltuk durumunu update ederim. Bu senaryo işler mi sence/sizce. Bir açık noktası var mı?


    Bilgi güçtür...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trnight
    trnight's avatar
    Kayıt Tarihi: 21/Ocak/2013
    Erkek
    wert bunu yazdı

    imkanın varmı bilmem fakat

    node.js ve socket.io kullanabilirsin

    Evet aklıma geldi fakat, sadece bu işlem için node.js pek kullanmak istemiyorum.


    Bilgi güçtür...
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trnight
    trnight's avatar
    Kayıt Tarihi: 21/Ocak/2013
    Erkek
    shock56 bunu yazdı
    trnight bunu yazdı

    Müritler Merhaba,

     

    Bir proje üzerinde düşünmekteyim orada şöyle bir nokta takıldı kafama. Senaryo şu şekilde sinema bilet satışı için bir web sitesi olsun. Kullanıcı gelip buradan online olarak bilet alacak. Kullanıcının biri gelip 5A koltuğuna tıkladığında diğer her kullanıcı için bu koltuğu 5 dk süre için kilitleyecek ve satma işlemini yapmayacak. 5 dakikanın sonunda bu koltuktaki kilidi kaldıracak. 

    Backend olarak PHP-Laravel kullanmayı düşünüyorum. Frontend'de ise Js-Jquery gibi düşünüyorum. Bu koltuk kilitleme olayında backend kısmında kendim bir tabloya her koltuk seçildiğinde bir satır mı ekletmeliyim(5A koltuk kilitlendi) yoksa Laravel'in bunun için bir çözümü var mı? Diğer ve asıl kafama takılan kısmı ise Frontend tarafı. Burada aklımda olan iki senaryo var;

    1. Ajax ile mesela her 30 saniyede bir istek gönderip kontrol ettirmek ve dom manipilasyonu ile koltukları kilitlemek. (İstek sayısı çok fazla mı olur? Performans çok mu kötü olur?)

    2. Ajax ile her 3-5 dk'de bir kontrol yaptırıp. Ek olarak bir de kullanıcı koltuk seçimi yaptığında kontrol ettirmek. 

     

    Frontend kısmındaki kontrolde Ajax sizce mantıklı olur mu? Kullanabileceğim bşka bir alternatif var mı?

    Biraz dağınık yazdım galiba ama soruları anladığınızı düşünüyorum :) Backend ve Frontend kısmında sorularımı cevaplayıp, yorumlayabilir misiniz? 

     

    Şimdiden teşekkürler müritler. 

    Laravel ile yazılmış şöyle bir script var. Belki işine yarar 

    https://github.com/mwlmalimi/bus-reservation

    Ayrıca laravel kullanacaksan jquery yerine livewire ve alpin.js kullanmanı tavsiye ederim. İşini ciddi derecede kolaylaştırır. 

    Teşekkürler hocam. Bu ara "livewire" çok gözüme çarpıyor eğer öneriyorsan inceleyip kullanmayı düşünüyorum. Gerçekten o kadar kullanışlı ve güzel mi? Jquery'e göre artıları nasıl? 


    Bilgi güçtür...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    neverland
    neverland's avatar
    Kayıt Tarihi: 08/Mayıs/2020
    Erkek
    trnight bunu yazdı
    wert bunu yazdı

    imkanın varmı bilmem fakat

    node.js ve socket.io kullanabilirsin

    Evet aklıma geldi fakat, sadece bu işlem için node.js pek kullanmak istemiyorum.

    Bir zararı yok, kullanabilirsin eğer shared hosting falan kullanmıyorsan.

    Php ile bu tür işleri yapmak kulağı terstten tutmak gibi oluyor. Gereksiz emek, efor ve zaman kaybı.


    Bir gece her zamanki gibi yatağına girip gözlerinin ağırlığına dayanamayıp huzurla uyuduğunu düşün. Sonrasında da hiç uyanmadığını düşünmeye çalıştığında aklında hiçbir şey canlanmayacaktır, çünkü beynin kapalıyken neler olup bittiğini bilemezsin, bu yüzden bu noktayı hayal edebileceğin bir veri yok elinde. Ölüm de tam olarak böyle bir şey. Uykunun 4. saatindeki hissettiklerin, yani; hiçlik, hissizlik. Varlığından ya da yokluğundan haberinin olmaması. Böyle düşününce ölüm biraz daha tanıdık geliyor, daha kabullenilebilir geliyor. Belki de içindeki o çılgın yaşama arzusuna sahip olan egonu ancak böyle ehlileştirebiliyorsun. Aksi halde çılgınca yaşama arzusuna sahip egon sana tanrılar yaratıyor, cennetler vaat ediyor, seni sonsuz bir yaşamın varlığı ve zevkleri ile kandırıyor.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    trnight bunu yazdı
    yolbulucu bunu yazdı

    koltuğu tuttuğun tabloya locked_at, locked_user diye bir field ekle, frontendde adam koltuk seçince o koltuğun locked_at  fieldına o anki tarih-saati, diğer fielda da session id yi yaz.

    kullanıcı başka bir koltuk seçerse önce gidip o session_id ile kilitlenmiş bir koltuk varmı ona bak, varsa onu sil. (update koltuklar set locked_at = null where session_id = $session_id), koltuğu öyle kitle.

    sonra laravelde bir cron job olustur, her dakika çalışsın ve db yi gezip 5 dakikadan daha eski kilitlenmiş koltukları silsin.

    frontende bi geri sayım sayacı ekleyebilirsin.

    eğer backend koltuğu sildiğinde front ende bildirim atmak istiyosan : 

    front endde koltuğu kilitlerken session id ile bi pusher channelı oluştur, ve onu dinlemeye başla (başka koltuk seçilirse eskisini dinlemeyi bırakırsın tabi)

    backenddeki cron jobun 5 dakikadan eski bir locku silerken aynı zamanda event broadcast etsin, böylece front endi haberdar etmiş olursun.

    bkz : 

    pusher.com

    https://laravel.com/docs/8.x/broadcasting

    https://laravel.com/docs/8.x/scheduling

    eventlerin çalışması için queue workerın arkada çalışması gerekiyor, eğer çalıştıramıyorsan(mesela shared hostingdeysen) laravel echo kullanmadan pusher api ye pushlamayı falan deneyebilirisn 

    edit: ben olsam böyle yaparım daha kısa çözümlerde olabilir.

    Hocam teşekkürler öncelikle. Pusher'ı araştırdım mantıklı geldi. Fakat şöyle bir şey geliyor aklıma. Örnek senaryo: kullanıcı koltuk adımına geldi, 10 koltuk var 3'ü kilitli. Kullanıcı bir koltuğu seçtiğinde broadcast geçip diğer kullanıcıları haberdar eder diğer kullanıcılardaki o koltuğu da kilitlerim. Bu sayede her kullanıcı için 10 saniyede bir kontrol yapmama gerek kalmaz. Garantiye almak için de 5 dakika da bir cron job çalıştırıp yine bir broadcast geçerim bütün kullanıcılardaki koltuk durumunu update ederim. Bu senaryo işler mi sence/sizce. Bir açık noktası var mı?

    abi hiç gerek yok bunu yapmana, her etkinlik için bir pusher channelı oluştur, kullanıcı koltuk seçince o channela seçilen koltuğu ve etkiliği pushla, etkinlik sayfasında da bu eventi dinle pusherla. zaten koltuk seçilince anında haberin olur.

    backendde satın alma tamamlanınca da aynı şekilde event trigger edersin, yine haber edersin frontende


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    neverland bunu yazdı
    trnight bunu yazdı
    wert bunu yazdı

    imkanın varmı bilmem fakat

    node.js ve socket.io kullanabilirsin

    Evet aklıma geldi fakat, sadece bu işlem için node.js pek kullanmak istemiyorum.

    Bir zararı yok, kullanabilirsin eğer shared hosting falan kullanmıyorsan.

    Php ile bu tür işleri yapmak kulağı terstten tutmak gibi oluyor. Gereksiz emek, efor ve zaman kaybı.

    yoo, yok öyle bir şey.


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
Toplam Hit: 2659 Toplam Mesaj: 16
ajax laravel