Domanda

che sto cercando di fare due clienti (giocatori) contatto tra loro (ad esempio lo scambio di stringhe) attraverso socket.io. Ho questo codice sui client (GameID è definito nel codice):

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

Mentre sul server ho questo (che è una delle prime cose che faccio, non in instradamento ovviamente)

var messageExchange = io
    .of('/play')
    .on('connection', function (socket) {
        socket.emit('message', {
            test: 'mex'
        });
      });

In pratica creo il canale, poi, quando gli utenti si connettono usano il canale per lo scambio di un messaggio del re "GameID" che solo i due di essi può leggere (utilizzando la roba on.(gameId+"" .... Il mio problema è che quando i giocatori si collegano (prima uno, poi l'altro), il primo che collegava dovrebbe avvertire i dati ricevuti (in quanto il secondo che collegavano emesso un messaggio). Qualcuno di voi sa perché questo non sta accadendo?

Grazie.

È stato utile?

Soluzione

Il server socket.io dovrebbe agire come un uomo di mezza. Si può ricevere messaggi da parte dei clienti e inviare messaggi ai clienti. Non agire come un "canale" per impostazione predefinita, se non avete i messaggi Relay Server da clienti ad altri clienti.

C'è un sacco di buone informazioni su usi comuni sul loro sito web, http://socket.io e loro pronti contro termine, https://github.com/LearnBoost/socket.io

Un semplice esempio di un client di chat potrebbe essere qualcosa di simile:

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" });

Mentre il server potrebbe agire in questo modo:

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
            });
        });
     });
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top