• 10-03-2014, 04:37:41
    #1
    Arkadaşlar nodede çok yeniyim. Toplu halde chat tamam da bire bir sohbet nasıl olcak bi türlü anlamadım.

    Sadeleştirerek anladığım kısmı yazayım anlamadığım kısmı anlayan biri açıklarsa sevinirim.

    var io = require("socket.io").listen(3000);
    
    io.sockets.on("connection",function(socket){
    	socket.on("data_tip1",function(gelenbilgi){
    		io.sockets.emit("sokettengelen", gelenbilgi);
    	});
    });
    server.js dosyamızı oluşturduk, 3000. porttan gelenleri karşıla ve sunucudaki herkese göster dedik. index.php de şöyle olsun;
    <script type="text/javascript" src="jquery-1.10.2.min.js"></script>
    <script type="text/javascript" src="http://localhost:3000/socket.io/socket.io.js"></script>
    <script type="text/javascript">
    	var socket = io.connect("http://localhost:3000");
    	socket.on("sokettengelen",function(data){
    		$('#xxx').append(data.isim + " : " + data.mesaj + "<hr/>");
    	});
    	
    	$(function(){
    		$('#gonder').click(function(){
    			var isim = $('input[name=isim]:first').val();
    			var mesaj = $('input[name=input1]:first').val();
    			if( mesaj.length > 0 && isim.length > 0 ){
    				socket.emit("data_tip1",{mesaj:mesaj,isim:isim});
    			}
    		});
    	});
    </script>
    
    
    isim<input type="text" name="isim"/>
    <br/>
    mesaj<input type="text" name="input1"/>
    <button type="button" id="gonder">gönder</button>
    
    <div id="xxx"></div>
    index.php'de de server.js'de oluşturulan soket bağlantısıyla sayfamızı ilişkilendirdik.

    (Aslında bu sayfadaki kodlar iki ayrı sayfada olcak inputlardan datayı alınca ayrı bi' php sayfasına post ettirip sonra servera yollayacağım ama mantık oturtma çalışması için sanırım bu kadarı yeterli.)

    Şimdi şu haliyle "a", "b" ve "c" isimli kişiler bu sayfayı çalıştırınca üçü de aynı portu dinlemeye başladı. "a" merhaba yazınca servera bağlı olan herkez "a"nın merhaba yazdığını gördü, aynı şekilde "b" ve "c"nin yazdıklarını da.

    Peki "a", sadece "b" ile konuşmak istesre nasıl olcak? Php'de bunlara özel bi konuşma alanı oluşturmanın birçok yolu var ama sonuçta ben "a" ve "b"nin konuşmalarını php'de diğer konuşmalardan ayıklayıp sokete göndersem de, soket o anda servera bağlı olan herkese konuşmayı göstercek.

    Bunu nasıl engellerim yani "a" ve "b"nin kendi aralarında konuşabilmesini, aynı portu dinleyen diğer userların bundan haberdar olmamasını nasıl sağlarım.

    Teşekkürler.
  • 10-03-2014, 11:01:39
    #2
    ilk olarak php kullanmana gerek yok. sadece girişte kullanıcı adı şifre doğrulamasında işine yarayabilir (senin sistemde), bunun dışında node için geliştirilmiş kullanıcı doğrulama sistemleri var.

    ikinci olarak kısaca anlatayım ama kafan karışacak biliyorum

    1- giriş yapan kullanıcıları bir array'de toplaman lazım
    2- array e atayacağın kullanıcı adını değeri, verisine de soket değerini ataman lazım
    (her giriş yapan kullanıcıya node tarafından oluşturuan bir key arrayi var onu ataman lazım bu bilgi nerede dersen şurada; io.sockets.on("connection",function(socket) yazan "socket" dir )
    3- array'e atadığın kullanıcı adlarını, chat ekranında bir yere yazdırıp üzerine tıklandığında özel mesaj göndermek için belirleyeceğin parametreler olması lazım. "özel mesaj olduğunu belirten parametre, kime gideceği, mesaj" bilgilerini socket.emit yaptığın yerde belirtiriyorsun, server tarafında da kontrol ediyorsun genel mesaj mı özel mesaj mı diye.
    4- eğer server tarafında yaptığın kontrolde özel mesaj olduğunu anlarsa, kullanıcı adını array'de kontrol edip varsa socket değeri üzerinden emit vasıtasıyla o kullanıcıya gönderiyorsun.

    yapıyorsun ediyorsun falan filan böyle anlatmak kafanı karıştırır, kod versem çözmen vakit alır, en iyisi sen şu videoları izle, aradığın cevap direkt olarak orada mevcut;

    http://www.youtube.com/user/smithamilli/videos
  • 10-03-2014, 17:59:17
    #3
    Maksat chat değil, nodeyi öğrenmek aslında ama pes etme noktasıyım. Videolara henüz bakmadım ama muhakkak işime yarayacaktır.

    Gerçekten de biraz kafam karıştı ama bu kıtlıkta bulduğum en iyi Türkçe kaynaklar arasında yerini aldı diyebilirim. En azından neyi araştırmam gerektiğini, nodenin bu işlem için kendine has bişeyleri olduğunu biliyorum.

    Teşekkürler.
  • 11-03-2014, 01:25:50
    #4
    chat olarak degilde başka bir işte ben şu şekilde yapmıstım,chat içinde işini görecektir
    users diye bir array olusturusun

    sockets.on connection içerisinde de

    users[socket]=socket şeklinde socket idyi diziye kaydedersin

    mesaj gönderirkende socket.emit yerine

    users['socketid'].emit şeklinde yollarsın. socketid yerinede işte mesaj gönderilcek kişinin socket idsi gelicek
  • 11-03-2014, 01:37:37
    #5
    Üyeliği durduruldu
    bunlar şuan bana basit geliyor 1-2 ay onesine kadar bende hiç bişi bilmiyordum benımde anlamadıgım bir nokda var aslnda yardım etcek varmı blmıyorum ama genede soriyim;

    Misal html5 ile tek kişilik oyunumuz var elimizde ben bunu node.js ile nasıl multi yaparım mantıgını kuramadım
  • 11-03-2014, 02:17:52
    #6
    @Genki; verdiğin idye özel emit kodu sanırım benim için şu an kilit nokta. Yukardaki bilgiler doğrultusunda deneme yanılma yapayım biraz.

    Konuya eklenen küçük büyük her bilgi benim için çok önemli şu an. İlgilenen herkese teşekkürler.
  • 11-03-2014, 17:59:53
    #7
    Her socket(client) bir bir iş oluşturup iş kuyruğuna eklerseniz. Bütün datalar sahiplerine gidecektir. Aralardaki parametre ihtiyaçları yapacağınız işlemlere göre şekillenmektedir. Aşağıda yazı size fikir verecektir.

    http://samet.in/nodejs-islem-kuyrugu-olusturmak/
  • 12-03-2014, 18:14:54
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Örnek bi' sohbet uygulaması yapacak olan var mı? Cidden bende başlayasım var ama nerden nasıl başlarım orada tıkandım.
  • 12-03-2014, 22:10:52
    #9
    saintx adlı üyeden alıntı: mesajı görüntüle
    Örnek bi' sohbet uygulaması yapacak olan var mı? Cidden bende başlayasım var ama nerden nasıl başlarım orada tıkandım.
    Alex Garett'ın hazırladığı set
    https://www.youtube.com/playlist?lis...xNRbcf0uyYzzK_ hemde mongodb kullanarak hazırlanmış, tadından yinmiyor.