İbrahim TELCİ Posted May 22, 2020 Posted May 22, 2020 Merhabalar. Yeni bir UniGUI kullanıcısıyım. Trial sürümde gerekli denemelerimi yaptıktan sonra bugün lisanslı kullanıcılar arasında yerimi aldım. Birkaç sorum olacaktı? MSSql veritabanı kullanıyorum. UniDAC veritabanı nesnelerini kullanıyorum. Nesneleri MainForm üzerine yerleştirdim. 1 Connection nesnem 1 adette Query nesnem var. Sayfa açıldığında ThreadTimer nesnesi içerisinden query ile vertabanını ayarlanan sürede (2 sn) kontrol ediyorum bir değişiklik var ise ekrandaki verileri yeniliyorum. Bu çalışma mantığı doğumudur? Bağlantı nesnelerini ThreadTimer nesnesi içerisinde her sorguda oluşturmam daha mı doğru olur? Birde forumda yaptığım araştırmalarda bağlantı nesnelerinin MainModule içerisine yerleştirmenin daha doğru olacağı söyleniyor ama MainModule içerisindeki nesnelere Threadtimer içerisinden erişmeye çalıştığımda hata alıyorum. Bu uygulama yaklaşık 200 ekran üzerinde aynı anda açık olacaktır. Bu durumda dikkat etmem gereken kritik noktalar varmıdır? SessionRestrict =srOnePerIP olarak ayarlı. Bunlar bilgilendirme ekranları olarak kullanılacak. Herhangi bir kullanıcı etkileşimi yok. Network koptuğunda bu 200 ekran yeniden bağlanmaya çalıştığında session hatası alırmıyım. HyperTerminal mi yoksa IIS mi kullanmalıyım hangisi daha hızlı ve sağlıklı olur? Quote
Freeman35 Posted May 23, 2020 Posted May 23, 2020 Merhaba, Benim önerim her sessionda timer la db bağlantısı, server a aşırı ve gereksiz yük bindirecektir. heleki 2sn de bir.Bu linkteki örnekleri ve wensocket örneklerini incele. db tek ise, her bağlantı db kotrolü yapacağına, tek bir yer db kontrolünü yapıp, sessionlara mesaj göndermesi performas için daha mantıklı. Bu işlemler sırasında, sistem gecikmelerinide bertaraf edecek kotroller koyman yerinde olacaktır. hyper terminal değilde hyperserver olabilir mi o :) sanırım 200 kullanıcıyı geçmiyeceksen, buna gerek kalmaz. ama IIS kullanman daha mantıklı. Quote
İbrahim TELCİ Posted May 23, 2020 Author Posted May 23, 2020 Yönlendirmen için teşekkür ediyorum. Yalnız herhangi bir link göremedim cevabında. Unuttun galiba bağlantı koymayı Quote
İbrahim TELCİ Posted May 23, 2020 Author Posted May 23, 2020 ServerModule üzerinde çalıştıracağım bir thread ile kontrol etsem ve değişiklik var ise bunu global bir değişkene aktarsam. diğer ekranlar bu değişkeni kontrol ederek güncelleme yapsalar bu doğru bir yaklaşım olur mu? Sever module üzerinde çalışacak bir thread sistemi çok yorar mı? Yoksa ayrıca bir uygulamamı hazırlamam gerekiyor. Winsocket uygulaması sadece bir değişikliği kontrol etmek için daha uğraşlı gibi geliyor bana. Birde sadece ilişkili sessiona özel bir mesaj Quote
Mehmet Emin Posted May 23, 2020 Posted May 23, 2020 Merhaba, uniGUI ile başlarken, eğer daha önce göz atmadıysanız geliştirici klavuzunu tümü ile incelemenizi öneririm. Database bağlantıları ve farklı thread lerin çakışmaması için MainForm, MainModule, ServerModule gibi nesnelere nasıl erişileceği ve diğer konular çok iyi açıklanmış durumda. Uygulamanızda birden çok form olacaksa veritabanı nesnesini MainModule üzerine yerleştirin. Query nesnesini form ya da MainModule üzerine yerleştirin. Bu arada ServerModule üzerinde rahatça thread başlatabilirsiniz sıkıntı olmaz ben sürekli kullanıyorum. procedure TUniServerModule.UniGUIServerModuleCreate(Sender: TObject); içinden thread inizi başlatın FAPIRefreshThread := TAPIRefreshThread.Create(True); FAPIRefreshThread.FreeOnTerminate := True; FAPIRefreshThread.Start; Kapanırlen de öldürün gitsin. procedure TUniServerModule.UniGUIServerModuleBeforeShutdown(Sender: TObject); begin if Assigned(FAPIRefreshThread) then begin FAPIRefreshThread.Terminate; Log.Debug('APIRefreshThread thread terminated', LOG_MAIN); end; Kolay gelsin. ** Diğer sorunuza gelince 200 ekrana aynı data mı akacak yoksa hepsinin kendi sorgusu ayrı mı anlayamadığım için net bir cevap veremeyeceğim. Quote
Freeman35 Posted May 24, 2020 Posted May 24, 2020 13 hours ago, İbrahim TELCİ said: Yönlendirmen için teşekkür ediyorum. Yalnız herhangi bir link göremedim cevabında. Unuttun galiba bağlantı koymayı Rahmetli pederi dinlemedim, oğlum yaşlanmayın derdi http://forums.unigui.com/index.php?/topic/14257-uniservermodulegetsession-new-powerfull-feature/ Quote
Freeman35 Posted May 24, 2020 Posted May 24, 2020 11 hours ago, İbrahim TELCİ said: ServerModule üzerinde çalıştıracağım bir thread ile kontrol etsem ve değişiklik var ise bunu global bir değişkene aktarsam. diğer ekranlar bu değişkeni kontrol ederek güncelleme yapsalar bu doğru bir yaklaşım olur mu? Sever module üzerinde çalışacak bir thread sistemi çok yorar mı? Yoksa ayrıca bir uygulamamı hazırlamam gerekiyor. Winsocket uygulaması sadece bir değişikliği kontrol etmek için daha uğraşlı gibi geliyor bana. Birde sadece ilişkili sessiona özel bir mesaj Global değişkenle kontrol bana mantıklı gelmiyor. sence hangisi mantıklı? aynı makinada çalışan 200 thread mi? yoksa çalışan 1 thread mi? yukarıdaki unuttuğum linki incele, ana thread içinden sessionlar da bir değişkeni tetikletmek bana daha mantıklı geliyor. Tabi burada Mehmet inde belirttiği gibi sessionlarda yapıacak işlemlerde önemli, hepsi aynı query çalıştıracaksa, farklı işlemler yapacaksa vs vs. bu kısım programcılık kısmı, yani yoğurt yeme şekli Quote
İbrahim TELCİ Posted May 26, 2020 Author Posted May 26, 2020 Cevaplar için çok teşekkür ediyorum. Benim için gayet faydalı dönüşler oldu. Şu an ServerModule üzerinde çalışan tek bir UniThreadTimer ile yükü epeyce azaltmış oldum. Her oturumun veritabanından aldığı kendine ait bir ID si var. Oturumları tarayarak değişiklik olan oturumdaki yerel bir değişkene true değeri gönderiyorum. Böylelikle oturumlar sadece kendilerine ait bir değişiklik varsa veri tabanına bağlanıp güncel veriyi çekiyorlar. Sorgu sayısında epeyce bir azalma oldu. yaklaşık 200/1 oranında Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.