folder Tahribat.com Forumları
linefolder Html - CSS - XML - JavaScript - Ajax
linefolder İki Farklı Socket.IO (Node.Js) Uygulamasını Nasıl Bağlarız, Fikri Olan Var Mı?



İki Farklı Socket.IO (Node.Js) Uygulamasını Nasıl Bağlarız, Fikri Olan Var Mı?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RockZs
    RockZs's avatar
    Kayıt Tarihi: 30/Haziran/2002
    Erkek

    Selamlar,

    Farklı ip ya da port larla socket.io vasıtasıyla clientlerle iletişim kuran sunucular düşünün. 

    SUNUCU1 üzerinde diyelim ki biri chat odası oluşturdu:

    socket.join(room_id);

    diyerek kanalı oluşturanı (soketi) kanala dahil ediyor.

    SUNUCU2 ye bağlanan biri diyelim ki oluşturulan chat odasına girmek istiyor (chat odası SUNUCU1 de oluşmuş fakat redis ile tüm sunuculara görünüyor):

    socket.join(room_id);

    diyerek room_id ye sahip kanala join oluyor.

    Şimdi, bu işlem tek bir node.js process i için sorunsuz çalışıyor fakat birden fazla sunucu kullanmak istediğimde malesef sağlıklı çalışmıyor çünkü kullanıcılar farklı farklı sunuculara bağlı ve aslında kanalına girilmeye çalışılan sunucunun durumdan haberi bile olmuyor..

    Nginx ile ip_hash dağıtım yapıyorum. Malesef bu olayı stateless yapamadım, yani diğer herşey stateless, çalışıyor fakat olay iki farklı sunucudaki kullanıcıların bir araya gelmesine gelince iş bozuluyor..

    Fikri olan var mı? Redis kullanarak yapılan çeşitli şekiller var ama çeşitli nedenlerden dolayı içime sinmedi. Redis kullanımda bi' sıkıntı yok, zaten var.

    Umarım anlatabildim, Sevgiler..

    RockZs tarafından 26/Ara/15 16:33 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Claw
    Claw's avatar
    Kayıt Tarihi: 30/Temmuz/2015
    Erkek

    Anladığım kadarıyla, A ve B sunucuları oda kurmak ve odaya girmek için kullanılıyor. Bunlarda problem yok ama c ve d sunucularını kullanıcıların ikisini ortak kullanabileceği bir ağa çevirmek istiyorsun ama A ve B izin ver miyor yanlış mıyım ?


    Real Eyes Realize Real Lies
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    detCode
    detCode's avatar
    Kayıt Tarihi: 30/Kasım/2012
    Erkek

    hocam daha önce redis ile yaptım senin dediğin olayı. başka bir clusterdaki cliente veri göndermek için redise bi veri publish ediyordum bütün clusterlar kendi içinde o client varmı diye kontrol edip var ise gönderiyordu bir sıkıntısını görmedim bu olayın. başka bilmiyorum nasıl yapılabilir. birde soru sorayım neden socket.io da direk ws değil ?

    detCode tarafından 26/Ara/15 21:26 tarihinde düzenlenmiştir

    Who is detCode?
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    hipokondriyak
    hipokondriyak's avatar
    Kayıt Tarihi: 02/Temmuz/2007
    Erkek

    senin yazdıgın su projeyi çok merak ediyorum cidden


    Homo sapiens, yaşamak için, diğer canlıların yaşamasına muhtaç; obligat parazit türüdür. "Sen olursan boş bardak , sana olur koyan çok su. a.g."
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RockZs
    RockZs's avatar
    Kayıt Tarihi: 30/Haziran/2002
    Erkek
    detCode bunu yazdı

    hocam daha önce redis ile yaptım senin dediğin olayı. başka bir clusterdaki cliente veri göndermek için redise bi veri publish ediyordum bütün clusterlar kendi içinde o client varmı diye kontrol edip var ise gönderiyordu bir sıkıntısını görmedim bu olayın. başka bilmiyorum nasıl yapılabilir. birde soru sorayım neden socket.io da direk ws değil ?

    hocam selam. pub/sub denen olay sanırım. sağol, şu anda inceliyorum.

    socket.io cluster modda (ya da scale olurken diyelim) gerçekten sorunlu, haklısın, hatta https://medium.com/@3rdeden/cluster-fucks-when-scaling-socket-io-2c8ad1153332#.k8sd5w9fy adresinde adam konuyu "Cluster fucks when scaling Socket.IO" diyerek kısaca özetlemiş, fakat oldukça popüler olmasından dolayı kullanma kararı aldım, öğrenmek kolay gibi geldi ve kolay da.. şu an için de socket.io ile devam gibi görünüyor hocam ama bakalım ne gibi bir çözüm bulacağım.

    sevgiler..

    ek: http://zeromq.org/ ve https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol de araştırılabilir, bulunsun.

    RockZs tarafından 28/Ara/15 13:42 tarihinde düzenlenmiştir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RockZs
    RockZs's avatar
    Kayıt Tarihi: 30/Haziran/2002
    Erkek
    detCode bunu yazdı

    hocam daha önce redis ile yaptım senin dediğin olayı. başka bir clusterdaki cliente veri göndermek için redise bi veri publish ediyordum bütün clusterlar kendi içinde o client varmı diye kontrol edip var ise gönderiyordu bir sıkıntısını görmedim bu olayın. başka bilmiyorum nasıl yapılabilir. birde soru sorayım neden socket.io da direk ws değil ?

    hocam tekrar merhaba..

    https://github.com/socketio/socket.io-redis

    buradaki modül ile sorunu hallettim. senin bahsettiğin olayı otomatikleştirmişler.

    sadece npm ile üstteki modülü kurup,

    var redis = require('redis').createClient;
    var adapter = require('socket.io-redis');
    var pub = redis(port, host, { auth_pass: "pwd" });
    var sub = redis(port, host, { return_buffers: true, auth_pass: "pwd" });
    io.adapter(adapter({ pubClient: pub, subClient: sub }));

    gibi bir kod eklemesi yaparak sessionların redis ile pub/sub edilmesi sağlanıyor. kendi kodlarım üzerinde hiçbir değişiklik yapmadan sorun ortadan kalktı.

    bilgilerinize, sevgiler..

Toplam Hit: 1184 Toplam Mesaj: 6
dereyi görmeden paçayı sıvama