2011-10-19 17 views
8

İki istemci (oyuncu) birbiriyle (örneğin dizeleri değiştirerek) socket.io aracılığıyla iletişim kurmaya çalışıyorum. Ben istemcilerde bu kodu (Oyun Kimliği kodunda geri tanımlanır) vardır:node.js üzerinden iki istemci ile bağlantı kurabiliriz.

var chat = io.connect('http://localhost/play'); 
chat.emit(gameId+"", { 
    guess: "ciao" 
}); 
chat.on(gameId+"", function (data) { 
    alert(data.guess); 
}); 

sunucuda ben (değil tabii yönlendirme, ilk yaptığım şeylerden biri olan)

bu sahipken kullanıcıların bağladığınızda Temelde ben bir kanal oluşturmak
var messageExchange = io 
    .of('/play') 
    .on('connection', function (socket) { 
     socket.emit('message', { 
      test: 'mex' 
     }); 
     }); 

, o zaman sadece ikiniz de bunlardan on.(gameId+"" ... malzeme kullanılarak (okuyabilir kral "Oyun Kimliği" mesajı alışverişinde kanalı kullanmak. Benim sorunum şu oyuncular olduğunu Bağlan (önce bir, sonra diğeri), bağlanan ilk veriyi uyarmalıdır (çünkü ikincisi bağlı bir mesaj yayınladı). Biriniz bunun neden olmadığını biliyor mu?

Teşekkürler.

cevap

10

socket.io sunucusu bir orta adam gibi davranmalıdır. Müşterilerden mesajlar alabilir ve müşterilere mesaj gönderebilir. İstemcilerden istemcilere başka istemcilerde ileti aktarmadığınız sürece, varsayılan olarak bir "kanal" işlevi görmez. Web sitelerinde, http://socket.io ve bunların repo ortak kullanımları hakkında iyi bilgi bir sürü

, https://github.com/LearnBoost/socket.io

bir sohbet istemcisi basit bir örnek Böyle bir şey olabilir:

var chat = io.connect("/play"); 
var channel = "ciao"; 

// When we connect to the server, join channel "ciao" 
chat.on("connect", function() { 
    chat.emit("joinChannel", { 
     channel: channel 
    }); 
}); 

// When we receive a message from the server, alert it 
// But only if they're in our channel 
chat.on("message", function (data) { 
    if (data.channel == channel) { 
     alert(data.message); 
    } 
}); 

// Send a message! 
chat.emit("message", { message: "hola" }); 

sunucuya iken şöyle davranabilir:

var messageExchange = io 
    .of('/play') 
    .on('connection', function (socket) { 
     // Set the initial channel for the socket 
     // Just like you set the property of any 
     // other object in javascript 
     socket.channel = ""; 

     // When the client joins a channel, save it to the socket 
     socket.on("joinChannel", function (data) { 
      socket.channel = data.channel; 
     }); 

     // When the client sends a message... 
     socket.on("message", function (data) { 
      // ...emit a "message" event to every other socket 
      socket.broadcast.emit("message", { 
       channel: socket.channel, 
       message: data.message 
      }); 
     }); 
    }); 
+0

Yani temelde sunucuya ulaşan 'gameId' kanalı üzerinden bir mesaj gönderdiğimi söylüyorsunuz Bununla ks, doğru muyum? Şimdiye kadar istemciler arasında "iletişim" yok, temelde "kanal" yok. Tamam, teşekkürler, tüm uygulamamı yeniden yapılandırmam gerekiyor. – Masiar

İlgili konular