Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js-socket.on中的sockets.io未从处理程序函数内的所有客户端拾取_Node.js_Sockets_Websocket - Fatal编程技术网

node.js-socket.on中的sockets.io未从处理程序函数内的所有客户端拾取

node.js-socket.on中的sockets.io未从处理程序函数内的所有客户端拾取,node.js,sockets,websocket,Node.js,Sockets,Websocket,我正在使用Node js构建一个应用程序,它以设定的间隔一个接一个地发送一系列消息。其中一个用户应该能够为房间中的每个人启动事件序列,然后所有用户都应该能够响应他们收到的消息 序列在一个单独的函数中处理,但当我调用该函数时,它只识别启动序列的套接字。我还尝试将函数放在for循环之外、io.on函数之外,并将套接字作为参数传递,然后返回消息并将for循环放在socket.on(“start”)函数之内 服务器端 io.on('connect', (socket) => {

我正在使用Node js构建一个应用程序,它以设定的间隔一个接一个地发送一系列消息。其中一个用户应该能够为房间中的每个人启动事件序列,然后所有用户都应该能够响应他们收到的消息

序列在一个单独的函数中处理,但当我调用该函数时,它只识别启动序列的套接字。我还尝试将函数放在for循环之外、io.on函数之外,并将套接字作为参数传递,然后返回消息并将for循环放在socket.on(“start”)函数之内

服务器端


  io.on('connect', (socket) => {    
    socket.on('enter', ({name, room}, callback) => {     
      ///working code to join users to room
    });

    socket.on('exit', ({room}) => {
      ///working code to exit users from room 
    }) 
    
    socket.on('startMessages', ({name, room}) => {      
      startMessages(name, room)      
    })
    
    async function startMessages(name, room) {
      
      io.in(room).emit('messagesStarted', {message: ""})
      
      const messages = await pool.query(
        `SELECT * FROM messages
      WHERE message_id = $1`, [room]) 
          
      messages = messages.rows[0]     
    
      for (const message in messages) {
        await new Promise(resolve => setTimeout(resolve, 15000));    
        io.in(room).emit('newMessage', {message: messages[message]})
        
        socket.on('test', ({name}) => {
          console.log(`${name} has done something`)
        })    
      }
    }

  })
}
客户端

<button onClick= {() => {socket.emit('test', {name: user})}}> Test </button> 
{socket.emit('test',{name:user}}}>test
无论哪个客户端启动该序列,服务器都会拾取它们的socket.emit('test'消息,但其他客户端都不会

任何帮助都将不胜感激