Question

Je suis en train de prendre contact deux clients (joueurs) les uns des autres (échange par exemple des chaînes) par socket.io. J'ai ce code sur les clients (gameid est défini dans le code de retour):

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

Alors que sur le serveur que j'ai ce (ce qui est l'une des premières choses que je fais, pas de routage bien sûr)

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

En fait, je crée le canal, puis lorsque les utilisateurs se connectent, ils utilisent le canal pour échanger un message du roi « gameid » qui les ne peut lire que les deux (en utilisant les trucs de on.(gameId+"" .... Mon problème est que lorsque les joueurs se connectent (premier, puis l'autre), le premier qui reliait devrait alerter les données reçues (parce que le deuxième qui reliaient émis un message). Est-ce que quelqu'un d'entre vous savez pourquoi cela ne se passe?

Merci.

Était-ce utile?

La solution

Le serveur socket.io doit agir comme un homme du milieu. Il peut recevoir des messages des clients et envoyer des messages aux clients. Il ne fonctionne pas comme un « canal » par défaut, sauf si vous avez les messages de serveur relais des clients à d'autres clients.

Il y a beaucoup de bonnes informations sur les utilisations courantes sur leur site Web, http://socket.io et leur prise en pension, https://github.com/LearnBoost/socket.io

Un exemple simple d'un client de messagerie instantanée pourrait être quelque chose comme ceci:

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

Alors que le serveur peut agir comme ceci:

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
            });
        });
     });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top