Подключение двух клиентов с socket.io через node.js

StackOverflow https://stackoverflow.com/questions/7823084

  •  27-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь заставить двух клиентов (игроков) связаться друг с другом (обменять, например, строки) через socket.io. У меня есть этот код для клиентов (GameID определяется в коде):

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

Находясь на сервере, у меня есть это (это одна из первых вещей, которые я делаю, не в маршрутизации, конечно)

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

В основном я создаю канал, затем, когда пользователи подключаются, они используют канал, чтобы обмениваться сообщением короля «GameId», которое могут прочитать только оба (используя on.(gameId+"" ... вещи. Моя проблема заключается в том, что когда игроки подключаются (сначала один, затем другой), первый, который подключился, должен предупредить полученные данные (потому что второй, который подключил излучение сообщения). Кто -нибудь из вас знает, почему этого не происходит?

Спасибо.

Это было полезно?

Решение

Сервер Socket.io должен действовать как средний человек. Он может получать сообщения от клиентов и отправлять сообщения клиентам. По умолчанию он не действует как «канал», если у вас нет сообщений ретрансляции сервера от клиентов к другим клиентам.

На их веб -сайте много хорошей информации об общем использовании, http://socket.io и их репо, https://github.com/learnboost/socket.io

Простым примером клиента чата может быть что -то вроде этого:

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

В то время как сервер может действовать так:

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
            });
        });
     });
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top