Uygulamadaki Kullanıcıyı Nasıl Kontrol Edebilirim ?
-
Müşterime geliştirmiş olduğum online bir oyunum var. Kullanıcı oyunu açtığı zaman örneksite.com/user.php sayfasına beni online yap şeklinde post işlemi yapıyor. Site veritabanında bu kişiyi online olarak gösteriyor.
Kullanıcı oyundayken (online olduğu zaman) internet erişimi koparsa ve oyunu kapatırsa bu kişi hep online olarak gözüküyor. İnterneti olmadığı için oyunu kapattığında siteye beni offline yap diyemiyor.
Veritabanında durumu online olan kişileri belirli aralıklarla kontrol etmem gerekiyor. Bir nevi oyun nasıl siteye post atıyorsa siteden de oyunun yüklü olduğu telefona/ip adresine veri gönderip veri ulaşmadıysa kişiyi offline'a çevirmem gerekiyor.
Bu bahsettiğim kontrol işlemini siteyi yavaşlatmadan nasıl yapabilirim ?
Oyunda C# kullanıyorum.
-
Veri tabanı sunucunda crontab yap 10 dk boyunca ben burdayım demeyeni oflline yap c# tan 9dk da bir ben burdayım de
-
DuPi bunu yazdı
Veri tabanı sunucunda crontab yap 10 dk boyunca ben burdayım demeyeni oflline yap c# tan 9dk da bir ben burdayım de
Kişi oyundayken interneti koparsa ve oyunu kapatırsa online olarak gözükecek. Oyunu kapattığı için siteye veri gönderemez. C#'dan Php'ye değilde Php'den C#'a veri göndermenin kontrol etmenin bir yolu yokmudur ?
-
O zaman şöyle söylim.
c# > kullanıcı online olduğunu 07.01.2016 21:12:15 te bildirdi.(bu zaman ve saat db ye kaydedildi!)
sunucuda crontab(belirli zamanlarda otomatik kontrol) işini yapan script 21:15:00'da çalıştı ve db deki online kullanıcıları kontrol etti. 3 dk önce giriş yapan x kullanıcısı için problem yoktu
ama X kullanıcısının şarjı bitti 10 dklık süre zarfında kendini ben hala burdayım diyerek ifade etmedi(ilk girişteki gibi 10dk da 1 kez burdayım desin)
21:25:00 da yapılan crontab kontrolünde son bildirimi 13dk önce olan X kullanıcısı artık online değil diye güncellensin ?
daha detaylı nasıl anlatırım bilmiyorum.
-
Hocam c# bilgim yok ancak, c ile socket kullanarak yapabilirsin gibime geliyor.
Sunucu tarafında bir tane server programın olur ve bağlantı bekler, yeni bir bağlantı geldiğinde tüm kullanıcılara online olan kullanıcıların listesini broadcast edersin.
Eğer kullanıcılardan herhangi biri koparsa, yine xx adlı kullanıcı oyunu terk etti gibi tüm kullanıcılara broadcast edersin.
Edit: Veritabanı işlemleri içinde yine giriş/çıkış yapan kullanıcıların id'sini php tarafına post edersin, bu şekilde cron tab olayını da aşmış olursun.
aercys tarafından 07/Oca/17 21:31 tarihinde düzenlenmiştir -
Hocam Apıler tek yönlü socket çift yönlü.
APILer de Server'dan Client'e data push edemezsin... Fakat Socket'ile çift yönlü veri olduğu için Client Server arasında hertürlü haberleşme var....
Bahsettiğiniz gibi 10 dakikada bir ben burdayım ben burdayım demesi saçma. Niye saçma . Her 10 dk da bir VT güncelleyeceksin diyelim 10.000 kullanıcı var her 10 dk da bir 10.000 beleşten Sorgu mu yazcan ?
Peki ya zamanı hassaslaştırdığını düşün ? 1 DK olsa ? Ne gerek var
PHP-> https://github.com/nekudo/php-websocket
-
MhmdAlmz bunu yazdı
Hocam Apıler tek yönlü socket çift yönlü.
APILer de Server'dan Client'e data push edemezsin... Fakat Socket'ile çift yönlü veri olduğu için Client Server arasında hertürlü haberleşme var....
Bahsettiğiniz gibi 10 dakikada bir ben burdayım ben burdayım demesi saçma. Niye saçma . Her 10 dk da bir VT güncelleyeceksin diyelim 10.000 kullanıcı var her 10 dk da bir 10.000 beleşten Sorgu mu yazcan ?
Peki ya zamanı hassaslaştırdığını düşün ? 1 DK olsa ? Ne gerek var
PHP-> https://github.com/nekudo/php-websocket
zihin okuyorsunuz zihiiiinnn
-
Yorumlarınız için teşekkürler. Oyun şuanda yayında olduğu için socket kullanımını malesef yapamam. Şuan için çalışıyor bir sıkıntı yok fakat internet giderse ve oyunu kapatıp silerse farkedilmediği sürece online olarak gözükecekti. Bu şekilde kalsın bakalım ilerleyen zamanlarda elbet bir yol buluruz.
@DuPi tavsiyen için teşekkürler. Farklı bir yöntem vardır diye düşündüm veritabanına bir sütun daha eklemek istemiyorum açıkcası :)
-
h0rtl4kk bunu yazdı
Yorumlarınız için teşekkürler. Oyun şuanda yayında olduğu için socket kullanımını malesef yapamam. Şuan için çalışıyor bir sıkıntı yok fakat internet giderse ve oyunu kapatıp silerse farkedilmediği sürece online olarak gözükecekti. Bu şekilde kalsın bakalım ilerleyen zamanlarda elbet bir yol buluruz.
@DuPi tavsiyen için teşekkürler. Farklı bir yöntem vardır diye düşündüm veritabanına bir sütun daha eklemek istemiyorum açıkcası :)
bu tür verileri tek bir sütunda json formatı ile tutabilirsin hocam.
nickname, last_activate, level, exp, coins, gems
-
ya en basit yöntem bu,
@MhmdAlmz socket kullanması en doğrusu ama bu şekilde istediğine göre böyle cevap verdim. ama senin söylediğin ws(websocket) olayını anlamadığını varsayıyorum. çünkü en stabili o olur.
-
DuPi bunu yazdı
ya en basit yöntem bu,
@MhmdAlmz socket kullanması en doğrusu ama bu şekilde istediğine göre böyle cevap verdim. ama senin söylediğin ws(websocket) olayını anlamadığını varsayıyorum. çünkü en stabili o olur.
Sen zaten yapması gerekeni söylemişsin bende yapmasını istediğimi söyledim :/
Şöyle birşey daha geldi aklıma ;
hocam şunu yap yazdığın program hangi dilde bilmiyorum ama
1 Adet Class oluştur
String Nickname
String Password
.
.
Time LastActiveTime;
Bu oluşturduğun class ile bir Linked List oluştur.
Bir Döngü içerisinde (Thread yaparsan daha mantıklı kanımca) (LastActiveTime-DateTime.Now()).minute==-15 Yani adam 15 dakika boyunca bişey yapmadı ise bu adam Aktif değildir diyeceksin ve Veritabanına yük değil de server'ına yük binmiş olacak. Bu daha mantıklı gibi... Genede Sen bilirsin :)