簡體   English   中英

socket.io不監聽全局事件

[英]socket.io not listening to global event

我正在研究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)
});

不從客戶端發送與回合開始相關的任何信息的想法是因為回合必須在套接字之間進行同步。

我究竟做錯了什么?

我通常在套接字連接到服務器時附加。 我在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)
    });
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM