Frage

Ich versuche, zwei Kunden (Spieler) dazu zu bringen, sich gegenseitig durch Socket.io zu kontaktieren (zum Beispiel Strings). Ich habe diesen Code auf den Clients (GameID ist im Code zurück):

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

Während ich auf dem Server habe, habe ich dies (was eines der ersten Dinge ist, die ich tue, natürlich nicht im Routing)

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

Grundsätzlich erstelle ich den Kanal. Wenn Benutzer eine Verbindung herstellen, verwenden sie den Kanal, um eine Nachricht des Königs "GameID" auszutauschen, den nur die beiden lesen können (mit dem mit dem on.(gameId+"" ... Sachen. Mein Problem ist, dass bei der Verbindung von Spielern (zuerst eine, dann der andere) die erste, die angeschlossen ist, die empfangenen Daten alarmieren sollte (weil die zweite, die eine Nachricht angeschlossen hat). Weiß jemand von Ihnen, warum das nicht passiert?

Vielen Dank.

War es hilfreich?

Lösung

Der Socket.IO -Server sollte sich wie ein mittlerer Mann verhalten. Es kann Nachrichten von Clients empfangen und Nachrichten an Clients senden. Es fungiert standardmäßig nur als "Kanal", es sei denn, Sie haben die Server -Relay -Nachrichten von Clients an andere Clients.

Auf ihrer Website gibt es viele gute Informationen zu gemeinsamen Verwendungen. http://socket.io und ihr Repo, https://github.com/learnboost/socket.io

Ein einfaches Beispiel für einen Chat -Client könnte so etwas sein:

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

Während der Server so handeln könnte:

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
            });
        });
     });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top