socket.io не слушает глобальное событие - PullRequest
0 голосов
/ 02 сентября 2018

Я копаюсь в документах Socket.io и до сих пор не могу понять, почему io.sockets.on не работает. Я пытался использовать io.on, но безуспешно.

На клиенте я просто слушаю события socket.on(ROUND_START/ROUND_END)

Этот клиентский прослушиватель работает, однако серверный - io.sockets.on(ROUND_START... - не работает.

Сервер

/**
 * Handle  Game phases
 */
const NEXT_GAME_TIMEOUT = 5000;
const END_GAME_TIMEOUT = 10000;
const FULL_GAME_TIMEOUT = END_GAME_TIMEOUT + NEXT_GAME_TIMEOUT;
const ROUND_START = "ROUND_START";
const ROUND_END = "ROUND_END";

setInterval(() => {
  io.sockets.emit(ROUND_START);
}, FULL_GAME_TIMEOUT);

// Not working
io.sockets.on(ROUND_START, () => {
  console.log("ROUND STARTED")

  setTimeout(() => {
    io.sockets.emit(ROUND_END);
  }, END_GAME_TIMEOUT)
});

io.sockets.on(ROUND_END, () => {
  console.log("ROUND ENDED")

  setTimeout(() => {
    io.sockets.emit(ROUND_START);
  }, NEXT_GAME_TIMEOUT)
});

Идея не посылать что-либо, связанное с началом раунда от клиента, заключается в том, что раунды должны быть синхронизированы между сокетами.

Что я делаю не так?

1 Ответ

0 голосов
/ 02 сентября 2018

Я обычно прикрепляю когда сокет подключаю к серверу. Я получил это, работая с примером чата на https://socket.io/get-started/chat

полная конфигурация сервера

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});

http.listen(3000, function(){
console.log('listening on *:3000');
});

const NEXT_GAME_TIMEOUT = 5000;
const END_GAME_TIMEOUT = 10000;
const FULL_GAME_TIMEOUT = END_GAME_TIMEOUT + NEXT_GAME_TIMEOUT;
const ROUND_START = "ROUND_START";
const ROUND_END = "ROUND_END";

io.on('connection', function(socket) {
    console.log("user connected!!!");
    socket.on(ROUND_START, () => {
        console.log("ROUND STARTED")

        setTimeout(() => {
        io.sockets.emit(ROUND_END);
        }, END_GAME_TIMEOUT)
    });

    socket.on(ROUND_END, () => {
        console.log("ROUND ENDED")

        setTimeout(() => {
        io.sockets.emit(ROUND_START);
        }, NEXT_GAME_TIMEOUT)
    });
})
...