• 15-07-2014, 15:12:54
    #10
    Üyeliği durduruldu
    PsiCat adlı üyeden alıntı: mesajı görüntüle
    Veritabanı ile işimizin olmadığı tek durum kayıt edilmesi gerekli olmayan bilgilerin söz konusu olduğu durumlar için geçerlidir. Ancak burada bir web sitesindeki yöneticinin mesajlarından basediyoruz, anlık olarak oyuncular arasında paylaşılan mesajlardan değil. Dolayısı ile bir veritabanına ve devamlılığa ihtiyaç var. Burada söz konusu olan tek yanlış bir önceki mesajımda da belirttiğim gibi olay güdümlü bir iletişim protokolü kullanmak yerine düzenli veritabanı sorguları yapmak.
    PsiCat Mesajları sadece aktif kullanıcılara göndermekse amaç veritabanı ile işi yoktur ancak senin dediğine göre benim anladığım kadarı ile o mesajı veritabanına ayriyetten kaydetmek istiyor eğer öyle ise birşey diyemem lakin nodejs de hiç bir zaman sql sorgusu autoya bağlanmaz arkadaşın izleyeceği yol sadece veritabanına kayıt esnasında sockette aktif tuttuğu kullanıcılara (tutmuyorsa ki yazılımı gözden geçirip tutması gerekir) mesajı göndermek olacaktır

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 15:12:54 -->-> Daha önceki mesaj 15:01:29 --

    PsiCat şunuda ekleyeyim, veritabanına giden kayıt ayriyetten "sadece online olanlara gidecek"miş. yani senin düşündüğün gibi sonradan girenleri kapsamıyor sonradan gelenler zaten veritabanını baştan yeni okuduğu için sorguya gerek varmı sence
  • 15-07-2014, 19:33:52
    #11
    Emura adlı üyeden alıntı: mesajı görüntüle
    PsiCat Mesajları sadece aktif kullanıcılara göndermekse amaç veritabanı ile işi yoktur ancak senin dediğine göre benim anladığım kadarı ile o mesajı veritabanına ayriyetten kaydetmek istiyor eğer öyle ise birşey diyemem lakin nodejs de hiç bir zaman sql sorgusu autoya bağlanmaz arkadaşın izleyeceği yol sadece veritabanına kayıt esnasında sockette aktif tuttuğu kullanıcılara (tutmuyorsa ki yazılımı gözden geçirip tutması gerekir) mesajı göndermek olacaktır

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 15:12:54 -->-> Daha önceki mesaj 15:01:29 --

    PsiCat şunuda ekleyeyim, veritabanına giden kayıt ayriyetten "sadece online olanlara gidecek"miş. yani senin düşündüğün gibi sonradan girenleri kapsamıyor sonradan gelenler zaten veritabanını baştan yeni okuduğu için sorguya gerek varmı sence
    Öncelikle mesajımdan nasıl "sadece online olanlar", "önceden" ve "sonrada" girenler hakkında bir ayrım yapıp, bahsedilmeyen konulara cevap verdiğinizi anlayamadım.

    İkinci olarak daha önceki mesajlarım ile soruna gerekli cevabı zaten vermiştim ancak sizin mesajınızdan anladığım kadarı ile bu konuda daha basit bir açıklama yapmam gerekli çünkü hangi cümlemden 'yani senin düşündüğün gibi sonradan girenleri kapsamıyor sonradan gelenler zaten veritabanını baştan yeni okuduğu için sorguya gerek varmı sence' gibi düşünmediğim hatta neden bahsettiğiniz dahi analayamadığım bir aşamadayız.

    Admin       --(1)---> PHP --(2)--> Veritabanı
                           |(3)
    Kullanıcı 1 <--(4)-- Node.js
    Kullanıcı 2
    Kullanıcı 3
    1-2. Admin PHP vasıtası ile bir mesaj kaydı yapıyor.
    3. Mesaj veritabanına kaydedildiğinde PHP Node.js'yi bilgilendiriyor
    4. Node.js kendisine bağlı olan kullanıcılara güncel verileri iletiyor.

    Burada yapılan tek sorgu; veritabanına yapılan kayıt sırasında yapılan sorgu. Herhangi bir düzenli sorgu yok. Zira ilk mesajımı okursanız düzenli SQL sorgularının bir "anti-pattern" olduğunu ve "Database-as-IPC" olarak adlandırıldığını yazmış olduğumu da görmeniz gerekirdi. Zira şimdi yukarıda bir "best-practise" olarak kabul edilen tasarım kalıbı ile ilgili bir sorununuz ya da yanlış olduğunu düşündüğünüz bir nokta varsa cevaplayabilirim.
  • 15-07-2014, 19:39:02
    #12
    Üyeliği durduruldu
    neden bir kızgınlıkla cevap verdiğini anlamadım "sadece online olanlar" alıntısını konuyu açan arkadaşın metnine gönderme yaptım.
    ben burada muhabbet ettiğimizi sanıyordum. neyse kolay gelsin kusura bakma.
  • 16-07-2014, 23:02:01
    #13
    Tüm arkadaşlara teşekkür ediyorum.
    Zorunlu bir tatilden dolayı , bayağıdır nete verimli bir şekilde giremiyordum cevap yazamadığım için kusura bakmayın.

    Şimdi anladığım kadarıyla PHP ile NodeJS arasında bir katman oluşturup , veritabanına veri kaydettikten sonra o veriyi NodeJS ile aktif kullanıcılara iletebiliyorum. Araştırmamı bunun üzerine yoğunlaştıracağım. Yapabilirsem uygulamayı burada paylaşırım inşallah

    Tekrardan çok teşekkürler yorum yapanlara...

    ek olarak https://www.r10.net/diger-server-side...meliyim-2.html adresinde NodeJS ile yapmaya çalıştığım mobil bir uygulama var, bunun içinde bir göz atma şansınız var mı acaba
  • 17-07-2014, 10:01:48
    #14
    uysal_rockci adlı üyeden alıntı: mesajı görüntüle
    Şimdi anladığım kadarıyla PHP ile NodeJS arasında bir katman oluşturup , veritabanına veri kaydettikten sonra o veriyi NodeJS ile aktif kullanıcılara iletebiliyorum. Araştırmamı bunun üzerine yoğunlaştıracağım. Yapabilirsem uygulamayı burada paylaşırım inşallah
    Başlangıç noktası olarak bu kodları kullanabilirsiniz.

    index.html
    <html>
      <head>
        <meta charset="UTF-8">
        <script src="https://cdn.socket.io/socket.io-1.0.6.js"></script>
        <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    
        <script>
          $(document).ready(function()
          {
            var socket = io.connect('ws://localhost:3000');
            socket.on('new_message', function(message)
            {
              $('#messages').append('<li>' + message + '</li>');
            });
          });
        </script>
      </head>
    
      <body>
        Mesajlar:
        <hr>
    
        <ol id='messages'>
          <li>Mesaj 1</li>
          <li>Mesaj 2</li>
          <li>Mesaj 3</li>
          <li>...</li>
          <li>...</li>
        </ol>
      </body>
    </html>
    admin.html
    <html>
      <head>
        <meta charset="UTF-8">
      </head>
    
      <body>
        <form action='message.php' method='post'>
          <input type='text' name='content' placeholder='Mesaj'>
          <input type='submit'>
        </form>
      </body>
    </html>
    message.php
    <?
    inform_node($_POST['content']);
    header("location:admin.html");
    
    function inform_node($content)
    {
      $addr = gethostbyname("127.0.0.1");
      $client = stream_socket_client("tcp://$addr:3001", $err_no, $error_message);
      fwrite($client, $content);
      fclose($client);
    }
    
    ?>
    node.js
    var net = require('net');
    var io = require('socket.io')();
    
    net.createServer(function (socket)
    {
      console.log('Yonetici baglandi.');
    
      socket.on('data', function (data)
      {
        console.log("Yoneticiden alinan mesaj: " + data.toString());
        io.emit('new_message', data.toString());
      });
    
    }).listen(3001);
    
    io.on('connection', function(socket)
    {
      console.log('Kullanici baglandi');
    });
    
    
    io.listen(3000);
    Normal bir uygulamadan tek farkı; 3001 nolu port üzerinde admin mesajları da dinleniyor. Admin bir mesaj kaydettiğinde (bu uygulamada aslında herhangi bir kayıt olmuyor) PHP, inform_node metodunda bir soket açarak Node.js'i bilgilendiriyor. Node.js de bu bilgiyi kullanıcılara gönderiyor.

    Dileğinize göre 2. bir port açma ihtiyacı duymadan da bunu yapabilirsiniz ancak benim önerim yukarıdaki şekilde yapmanız yönünde olur. Admin iletişimi basit bir soket vastıtasyıla yapıldığı için çok daha fazla hızlı ve sorunsuz olacaktır.

    Bir diğer konu ise güvenlik. Hem PHP hem de Node.js sunucu tarafında bir birleri ile konuştukları için basit bir "hash" kontrolü pek çok uygulamada yeterli olacaktır.
  • 22-09-2014, 03:52:27
    #15
    Takipteyim.
    Nodenin acemisi olmakla beraber bi sitede php ve node ile bi birebir sohbet kodladım.

    Ben nodeyi php'ye aşağıdaki gibi import ederek kullandım. Php'de porta hiç bulaşmadan aşağıdaki şekilde kullanım bi soruna sebep olur mu? Performans açısından yöntemleri kıyaslayabilir misiniz (bilmediğimden soruyorum)

    <script type="text/javascript" src="<?php echo $sett["live"]["host"]; ?>:<?php echo $sett["live"]["port"]; ?>/socket.io/socket.io.js"></script>
    <script type="text/javascript">
    	var socket = io.connect("<?php echo $sett["live"]["host"]; ?>:<?php echo $sett["live"]["port"]; ?>");
    	function soket_kontrol(){ var x=false; if(socket != undefined){ x=true; } return x; }	
    </script>
    edit: Ayrıca hem go(lang) hem node hakkında bilgi sahibi biri varsa ve ikisi arasında bi tercih yapmama yardımcı olacak bi kıyas yaparsa çok sevinirim. Biraz onunla, biraz bununla uğraşıyorum beynim allak bullak oldu. Yayılma hızına bakarsak node koptu gidiyo ama nedense go daha bi çekiyo kendine.
  • 28-09-2014, 00:00:32
    #16
    Ben de node.js ve GoLang arasında kalıyordum. Özellike ciddi söylentiler kafamı karıştırdı. Yorumlamam gerekirse; node.js herşeye yetiyor. Go'nun faydaları ile kaybettireceği zamanı, projeyi ekstra geliştirebilecek personel mevzuları düşünüldüğünde node.js'nin yerine daha kötü bir seçim olarak görünüyor(bence).

    Go'nun yapısı aşırı derecede kafa karıştırıcı ve esnek değil. Ben güvendiğim birine bu soruyu sorduğumda Go yerine Haskell öğren demişlerdi. Haskell'e baktıktan sonra Go'dan da Haskell'den de soğudum. Bunlarla proje çıkartmak gerçekten uğraştırıcı ve zor.

    Sonuç olarak mantıklı bir açıklamaya dönüştürmek gerekirse; startup bir proje için çoook ileriki aşamaya kadar node.js'nin karşıladığı ihtiyaçlar durum dahilinde kurtarıcı olacaktır. Linkedin, Facebook gibi olana kadar da Go'da vb. uygulamalar da öğrenilir. Ancak şöyle bir mantıklı düşünülüp en iyisini yapana(performans vb.) kadar ortaya proje çıkmayacağını düşünürsek node.js bana göre daha mantıklı...
  • 05-10-2014, 02:09:51
    #17
    Misafir
    codeksper adlı üyeden alıntı: mesajı görüntüle
    Takipteyim.
    Nodenin acemisi olmakla beraber bi sitede php ve node ile bi birebir sohbet kodladım.

    Ben nodeyi php'ye aşağıdaki gibi import ederek kullandım. Php'de porta hiç bulaşmadan aşağıdaki şekilde kullanım bi soruna sebep olur mu? Performans açısından yöntemleri kıyaslayabilir misiniz (bilmediğimden soruyorum)

    <script type="text/javascript" src="<?php echo $sett["live"]["host"]; ?>:<?php echo $sett["live"]["port"]; ?>/socket.io/socket.io.js"></script>
    <script type="text/javascript">
    	var socket = io.connect("<?php echo $sett["live"]["host"]; ?>:<?php echo $sett["live"]["port"]; ?>");
    	function soket_kontrol(){ var x=false; if(socket != undefined){ x=true; } return x; }	
    </script>
    edit: Ayrıca hem go(lang) hem node hakkında bilgi sahibi biri varsa ve ikisi arasında bi tercih yapmama yardımcı olacak bi kıyas yaparsa çok sevinirim. Biraz onunla, biraz bununla uğraşıyorum beynim allak bullak oldu. Yayılma hızına bakarsak node koptu gidiyo ama nedense go daha bi çekiyo kendine.
    Şimdi ilk olarak sen nodejs yi import etmemişsin. Socket.IO kullanmışsın realtime çalışmak için. Socket.IO nun server kısmıda nodejs ye kodlamışsın. Yani Socket.IO'yu import etmişsin.

    Php ye yaptığın şekilde socket.io yu import ettiğinde socket.io sayfa yüklendikten sonra çalışmaya başlıyor ve sadece nodejs de kodlu olan ve portunu oraya yazdığın server ile haberleşiyor. Sayfa yüklendikten sonra socket.io nun php ile bir alakası kalmıyor. Yani şuandaki sistemde portlar ayrı olduğu tamamen varsayımda bulunarak, sayfa yorumlama kısmındaki yük apache de socket.io daki yük nodejs de olacak ve performans açısından iyi bişey yapmış olabilirsin. Emin değilim.

    Ama bu şekilde kullanımda socket.io clientlerinin hangi sessiondan bağlandığını nasıl buluyorsun bilmiyorum. socket.io clientleri bağlanırkende cookie verisi de gönderir ve böylelikle hangi session bilgileri var burdan bulabilirsin. Ama senin session atamaların php de, nodejs de socket.io var. memcached - redis vs. ye session bilgilerini tutman gerekiyor bu şekilde kullanmak için.

    Son soruya gelirsek, sen php kullanıyorsun şuanda siteyi tamamen nodejs de express kütüphanesini kodlayarak yapsaydın. Golang'e geçtiğinde de martini ( benzeri birkaç kütüphane daha var ) kütüphanesi ile, ikisininde modüler yapıda olması sebebiyle oluşan benzerlikten dolayı kodlamanı rahat bi şekilde yapardın. Sadece golang tutoriallere biraz göz gezdirip az syntax öğrenip sonrada google ve stackoverflow arasında gezmen yeterli olurdu. Nodejs de çok fazla modül var aradığın çoğu şeyi hemen bulabiliyorsun. Kolay yoldan yapabiliyorsun. Golang bu yönden biraz zayıf. Modül yazanlar var tabi ama nodejs ye çok az. Profesyonel firmaları bilmiyorum ama benim internetteki sorularda gördüğüm kadarıyla Golang ile uğraşan kişi sayısı nodejs ye göre daha az.

    Golang'in en sevdiğim yönü ise yazdığın kodu linux - window için derleyebiliyor olman. Yani yaptığın websitesini exe haline çevirip istediğin yerde çalıştırabiliyorsun. Nodejs de ise script çalışıyor. Böyle bir olay yok. Zaten golang i sadece websitesi için düşünmemek gerekiyor.

    Birbaşka olay ise php de veya aspde de realtime uygulamalar yapabilirsin. Performans açısından fikrim yok ancak php için elephant.io, asp için signalr gibi çeşitli projeler mevcut.
  • 06-08-2015, 12:47:10
    #18
    Üyeliği durduruldu
    Hocam veritabanına kaydedin ancak veritabanından çekim yapmayın bence.
    yani:
    admin olan kullanıcıda bir istemci ile soket baglantısı yapsın. sonrasında bir kayıt girdiğinde bir fonksiyonu tetiklesin sonuc basarılı oldugundada kayıtları baglı diger istemciye göndersin.
    settimeout yaptıktan sonra neden soketle baglantı kurasınızki