

Her "Connect" İn Bir "Disconnect" İ Yok Mudur? (Node.Js, Redis, Socket.İo Vs.. İçerir)
-
selamlar,
node.js kullanan bi' sitedeki anlık kullanıcı sayısını belirleme amacıyla basit bi' monitör yapayım dedim. uygulamada :
io.on('connection', function(socket){ client.incr('monitor_online_users'); //FOR_MONITORING ... ... socket.on('disconnect', function(){ client.decr('monitor_online_users'); //FOR_MONITORINGşeklinde basit bi' kod var. client.incr ve client.decr ile redisteki "monitor_online_users" ı 1 arttırıp/azaltıyorum.
nitekim, aktif online user sayısı eksi değerlere düşüyor.. niye böyle olduğu hakkında bi' fikri olan var mı?
sevgiler..
ÇÖZÜM
1) server tarafında socket.io-disconnect eventinde socket.on yerine socket.once kullanmak.
2) client tarafında server ile bağlantı kurulurken {'force new connection': false} ayarını girmek. tabi bunun bazı dezavantajları olabilir, özellikle sağlıklı olmayan, kopan bağlantılarda.. bunun yerine sunucu tarafında da birşeyler düşünülebilir.. (socket.io büyük eşit 1.0 => 'forceNew': false kullanılmalı). yani:
//SERVER SIDE: socket.once('disconnect', function(){ //event trigger when a client disconnect client.decr('monitor_online_users'); //FOR_MONITORING //... //CLIENT SIDE: var socket = io('http://128.128.128.128:3333', {'forceNew': false });
RockZs tarafından 31/Mar/16 14:56 tarihinde düzenlenmiştir -
şimdi mantıken asenkron olduğu için adam düştüğünde zaten değer otomatik 1 azalır, sen de 1 azaltırsan haliyle her gelen 1 arttırırken her giden 2 azaltır. Böyle mi oluyo acaba?
-
http://stackoverflow.com/questions/17287330/socket-io-handling-disconnect-event
şurdada aynısını yapmışlar enteresan
SinusX tarafından 29/Oca/16 02:38 tarihinde düzenlenmiştir -
wasd bunu yazdı
şimdi mantıken asenkron olduğu için adam düştüğünde zaten değer otomatik 1 azalır, sen de 1 azaltırsan haliyle her gelen 1 arttırırken her giden 2 azaltır. Böyle mi oluyo acaba?
belki ben dediğinizi anlamadım hocam ama client.decr() ifadesini kullanmazsam adam düşünce değişken azalmaz ve bu da işe yaramaz zaten amaç disconnect event'inde hafızadaki numarayı bir azaltmak.
bence ya redis ile iletişimde bi' kopukluk oluyor (ki düşük bir ihtimal, bu kadar yoğun mesaj kaybı olamamalı) ya da socket.io (node.js) de nedenini bilemediğim bir şekilde disconnect iki kere tetikleniyor, ki böyle olduğu aşikar ama nedenini aklım almıyor.
yine de yorum için teşekkür ederim.
çözüm 'belki' şöyle olabilir:
http://stackoverflow.com/questions/10342548/socket-io-disconnect-event-isnt-fired?rq=1 adresinde yazdığına göre io.engine.clientsCount diye dahili bir socket.io özelliği varmış, client'deki açık connectionları gösteren, belki bunu kullanabilirim.
yine aynı kaynakta, disconnect event'i için .on('disconnect') yerine .once('disconnect') kullanılması tavsiye edilmiş. belki (hatta muhtemelen) bunu kullanırsam sorunum çözülür çünkü disconnect event'i her bir soket için ayrı ayrı tetiklenirmiş, (Note: Use .once instead of .on and the listener will be removed automatically from the socket what is good for us now, because disconnect only fired once per socket). Sanırım sorumun cevabı bu oluyor ama yine de tam olarak anlamadım..
sanırım bir connection durumunda birden çok (belki farklı farklı türlerde; xhr, websockets gibi..) socket bağlantısı açılabiliyor..
RockZs tarafından 29/Oca/16 10:12 tarihinde düzenlenmiştir -
bunu üstteki mesajı düzenleyemediğim için yazıyorum.
disconnect event'i için .on('disconnect') yerine .once('disconnect') kullandım ve sorun çözüldü.
belki connect eventi için de aynı şeyi yapmak faydalı olabilir.
sevgiler.
RockZs tarafından 25/Şub/16 16:19 tarihinde düzenlenmiştir -
RockZs bunu yazdıwasd bunu yazdı
şimdi mantıken asenkron olduğu için adam düştüğünde zaten değer otomatik 1 azalır, sen de 1 azaltırsan haliyle her gelen 1 arttırırken her giden 2 azaltır. Böyle mi oluyo acaba?
belki ben dediğinizi anlamadım hocam ama client.decr() ifadesini kullanmazsam adam düşünce değişken azalmaz ve bu da işe yaramaz zaten amaç disconnect event'inde hafızadaki numarayı bir azaltmak.
bence ya redis ile iletişimde bi' kopukluk oluyor (ki düşük bir ihtimal, bu kadar yoğun mesaj kaybı olamamalı) ya da socket.io (node.js) de nedenini bilemediğim bir şekilde disconnect iki kere tetikleniyor, ki böyle olduğu aşikar ama nedenini aklım almıyor.
yine de yorum için teşekkür ederim.
çözüm 'belki' şöyle olabilir:
http://stackoverflow.com/questions/10342548/socket-io-disconnect-event-isnt-fired?rq=1 adresinde yazdığına göre io.engine.clientsCount diye dahili bir socket.io özelliği varmış, client'deki açık connectionları gösteren, belki bunu kullanabilirim.
yine aynı kaynakta, disconnect event'i için .on('disconnect') yerine .once('disconnect') kullanılması tavsiye edilmiş. belki (hatta muhtemelen) bunu kullanırsam sorunum çözülür çünkü disconnect event'i her bir soket için ayrı ayrı tetiklenirmiş, (Note: Use .once instead of .on and the listener will be removed automatically from the socket what is good for us now, because disconnect only fired once per socket). Sanırım sorumun cevabı bu oluyor ama yine de tam olarak anlamadım..
sanırım bir connection durumunda birden çok (belki farklı farklı türlerde; xhr, websockets gibi..) socket bağlantısı açılabiliyor..
Aklıma şu geldi xmpp kullanırken karşılaşmıştık benzer bir durumla kullanıcı sisteme giriş yaptıktan sonra siteden yeni bir tab açarsa connect olduğu için yeni connection açmayabilir ama kapatırken iki tabi de kapatırsa disconnect iki kere tetiklenebilir
-
Asi296 bunu yazdıRockZs bunu yazdıwasd bunu yazdı
şimdi mantıken asenkron olduğu için adam düştüğünde zaten değer otomatik 1 azalır, sen de 1 azaltırsan haliyle her gelen 1 arttırırken her giden 2 azaltır. Böyle mi oluyo acaba?
belki ben dediğinizi anlamadım hocam ama client.decr() ifadesini kullanmazsam adam düşünce değişken azalmaz ve bu da işe yaramaz zaten amaç disconnect event'inde hafızadaki numarayı bir azaltmak.
bence ya redis ile iletişimde bi' kopukluk oluyor (ki düşük bir ihtimal, bu kadar yoğun mesaj kaybı olamamalı) ya da socket.io (node.js) de nedenini bilemediğim bir şekilde disconnect iki kere tetikleniyor, ki böyle olduğu aşikar ama nedenini aklım almıyor.
yine de yorum için teşekkür ederim.
çözüm 'belki' şöyle olabilir:
http://stackoverflow.com/questions/10342548/socket-io-disconnect-event-isnt-fired?rq=1 adresinde yazdığına göre io.engine.clientsCount diye dahili bir socket.io özelliği varmış, client'deki açık connectionları gösteren, belki bunu kullanabilirim.
yine aynı kaynakta, disconnect event'i için .on('disconnect') yerine .once('disconnect') kullanılması tavsiye edilmiş. belki (hatta muhtemelen) bunu kullanırsam sorunum çözülür çünkü disconnect event'i her bir soket için ayrı ayrı tetiklenirmiş, (Note: Use .once instead of .on and the listener will be removed automatically from the socket what is good for us now, because disconnect only fired once per socket). Sanırım sorumun cevabı bu oluyor ama yine de tam olarak anlamadım..
sanırım bir connection durumunda birden çok (belki farklı farklı türlerde; xhr, websockets gibi..) socket bağlantısı açılabiliyor..
Aklıma şu geldi xmpp kullanırken karşılaşmıştık benzer bir durumla kullanıcı sisteme giriş yaptıktan sonra siteden yeni bir tab açarsa connect olduğu için yeni connection açmayabilir ama kapatırken iki tabi de kapatırsa disconnect iki kere tetiklenebilir
tab ile alakalı olsaydı mutlaka farkederdim hocam çünkü birçok kez çoklu tab'lar ile denemeler yaptım. sevgiler..
-
RockZs bunu yazdıAsi296 bunu yazdıRockZs bunu yazdıwasd bunu yazdı
şimdi mantıken asenkron olduğu için adam düştüğünde zaten değer otomatik 1 azalır, sen de 1 azaltırsan haliyle her gelen 1 arttırırken her giden 2 azaltır. Böyle mi oluyo acaba?
belki ben dediğinizi anlamadım hocam ama client.decr() ifadesini kullanmazsam adam düşünce değişken azalmaz ve bu da işe yaramaz zaten amaç disconnect event'inde hafızadaki numarayı bir azaltmak.
bence ya redis ile iletişimde bi' kopukluk oluyor (ki düşük bir ihtimal, bu kadar yoğun mesaj kaybı olamamalı) ya da socket.io (node.js) de nedenini bilemediğim bir şekilde disconnect iki kere tetikleniyor, ki böyle olduğu aşikar ama nedenini aklım almıyor.
yine de yorum için teşekkür ederim.
çözüm 'belki' şöyle olabilir:
http://stackoverflow.com/questions/10342548/socket-io-disconnect-event-isnt-fired?rq=1 adresinde yazdığına göre io.engine.clientsCount diye dahili bir socket.io özelliği varmış, client'deki açık connectionları gösteren, belki bunu kullanabilirim.
yine aynı kaynakta, disconnect event'i için .on('disconnect') yerine .once('disconnect') kullanılması tavsiye edilmiş. belki (hatta muhtemelen) bunu kullanırsam sorunum çözülür çünkü disconnect event'i her bir soket için ayrı ayrı tetiklenirmiş, (Note: Use .once instead of .on and the listener will be removed automatically from the socket what is good for us now, because disconnect only fired once per socket). Sanırım sorumun cevabı bu oluyor ama yine de tam olarak anlamadım..
sanırım bir connection durumunda birden çok (belki farklı farklı türlerde; xhr, websockets gibi..) socket bağlantısı açılabiliyor..
Aklıma şu geldi xmpp kullanırken karşılaşmıştık benzer bir durumla kullanıcı sisteme giriş yaptıktan sonra siteden yeni bir tab açarsa connect olduğu için yeni connection açmayabilir ama kapatırken iki tabi de kapatırsa disconnect iki kere tetiklenebilir
tab ile alakalı olsaydı mutlaka farkederdim hocam çünkü birçok kez çoklu tab'lar ile denemeler yaptım. sevgiler..
Eyvallah connect olduktan belli bir süre sonra aktif olmayanları otomatik disconnect edip siteyi terkederken tekrar tetikleniyor olabilir ya da direkt nodejs ile alakalı bir durum olabilir
-
Asi296 bunu yazdıRockZs bunu yazdıAsi296 bunu yazdıRockZs bunu yazdıwasd bunu yazdı
şimdi mantıken asenkron olduğu için adam düştüğünde zaten değer otomatik 1 azalır, sen de 1 azaltırsan haliyle her gelen 1 arttırırken her giden 2 azaltır. Böyle mi oluyo acaba?
belki ben dediğinizi anlamadım hocam ama client.decr() ifadesini kullanmazsam adam düşünce değişken azalmaz ve bu da işe yaramaz zaten amaç disconnect event'inde hafızadaki numarayı bir azaltmak.
bence ya redis ile iletişimde bi' kopukluk oluyor (ki düşük bir ihtimal, bu kadar yoğun mesaj kaybı olamamalı) ya da socket.io (node.js) de nedenini bilemediğim bir şekilde disconnect iki kere tetikleniyor, ki böyle olduğu aşikar ama nedenini aklım almıyor.
yine de yorum için teşekkür ederim.
çözüm 'belki' şöyle olabilir:
http://stackoverflow.com/questions/10342548/socket-io-disconnect-event-isnt-fired?rq=1 adresinde yazdığına göre io.engine.clientsCount diye dahili bir socket.io özelliği varmış, client'deki açık connectionları gösteren, belki bunu kullanabilirim.
yine aynı kaynakta, disconnect event'i için .on('disconnect') yerine .once('disconnect') kullanılması tavsiye edilmiş. belki (hatta muhtemelen) bunu kullanırsam sorunum çözülür çünkü disconnect event'i her bir soket için ayrı ayrı tetiklenirmiş, (Note: Use .once instead of .on and the listener will be removed automatically from the socket what is good for us now, because disconnect only fired once per socket). Sanırım sorumun cevabı bu oluyor ama yine de tam olarak anlamadım..
sanırım bir connection durumunda birden çok (belki farklı farklı türlerde; xhr, websockets gibi..) socket bağlantısı açılabiliyor..
Aklıma şu geldi xmpp kullanırken karşılaşmıştık benzer bir durumla kullanıcı sisteme giriş yaptıktan sonra siteden yeni bir tab açarsa connect olduğu için yeni connection açmayabilir ama kapatırken iki tabi de kapatırsa disconnect iki kere tetiklenebilir
tab ile alakalı olsaydı mutlaka farkederdim hocam çünkü birçok kez çoklu tab'lar ile denemeler yaptım. sevgiler..
Eyvallah connect olduktan belli bir süre sonra aktif olmayanları otomatik disconnect edip siteyi terkederken tekrar tetikleniyor olabilir ya da direkt nodejs ile alakalı bir durum olabilir
güzel fikir yürütüyorsun hocam ama süre ile de ilgisi yok, buna da eminim. neyse sorun şimdilik halloldu gibi görünüyor. yani bir şekilde bazı kullanıcılar iki ya da daha çok kez disconnect oluyor, fakat sadece 1 kez connect oluyorlardı.. ya da hiç connect olmayan userlar vardı.. fakat bunun olması için bir neden göremiyordum. ilk mesajda gösterdiğim gibi kod çok basit aslında, bir soket bağlandığında sayıyı bir arttır, o soket disconnect olduğunda sayıyı bir azalt.
neyse şimdilik iyi gidiyor.. yeni sürümde connect'te de .on yerine .once kullanmayı deneyeceğim, belki bu sayede fazlalık olan 1 kullanıcının da önüne geçerim, şimdilik çok büyük bir sorun değil ama nasıl olduysa 1 kullanıcı fazla görünüyor..
doğrudan socket.io ile ilgili olması lazım. henüz bilmediğim xhr polling, web sockets.. gibi bağlantı türleri var, bunları felan araştırıp belki ileride tam nedenini anlarım.. belki bir kullanıcı önce xhr ile bağlanıp, sonra bir şekilde websockets e geçiyorsa böyle bir durum oluşabilir.. hiç ama hiç emin değilim :D
-
Hocam hiç okumadım ne senin yazdığını ne diğerlerini mobildeyim şu an , başlığı okuyunca aklıma direk cevabı geldi, cevap yok , yani Facebook messenger da giriyorsun çıkamıyorsun :))))) tabi o butonu okumadıkları için çıkamıyoruz o işin esprisi :)) ama sonuç olarak yok :))
-
güzel baslikmis, güzel brain storming olmus. bravo beyler ya.