Socket io 延迟一个事件

Posted

技术标签:

【中文标题】Socket io 延迟一个事件【英文标题】:Socket io delay one event 【发布时间】:2021-10-01 09:12:55 【问题描述】:

我已经将 socket io 连接到 Webhook 并且它成功了。它可以获取信息并可以表达但我遇到了一个问题。当所需的值显示在客户端时,响应会延迟。例如,当服务器端检测到事件时,console.log() 会显示;但它不会显示在客户端。但是当服务器端再次检测到事件(第二次)第一次保存的值被发送到客户端,如果服务器再次检测到事件(第三次)第二次事件值被发送到客户端-侧,这意味着它将延迟事件一次。我该如何解决此事件?

// Server
const app = require('express')();
const http = require('http').createServer(app);
const io = require('socket.io',  
    transports: ['websocket', 'polling'] 
)(http, 
    cors: 
        origin:'*'
    
);
const bodyParser = require("body-parser");


PORT = 8080;

io.on('connection', socket => 
app.use(bodyParser.json());
app.post('/api', (req, res) => 
 
    let x = req.body[0];
    let dates = x.created_date; 
    let name = x.name; 
    let watchlist = x.watchlist[Object];

if (watchlist == "Matched")
  console.log("Date :", dates)
  console.log("Name :", name)
  io.emit('FromAPI', dates, name);

else 
  console.log("Unmatch")

res.status(200).end("Successfully");
    
);
console.log('Socket connected');
socket.on('disconnect', () =>  console.log('Socket disconnected'));
);

http.listen(PORT, () => 
console.log(`Server : http://localhost: $PORT`);
);

// Client
import  useEffect, useState  from 'react';
import io from 'socket.io-client';
const socket = io("http://localhost:8080",  transports: ['websocket', 'polling'] );


export default function App() 
   const [date, setDate] = useState('');
   const [name, setName] = useState('');
   const [hook_event, setHook_event] = useState([
      "date": date, "name": name,
      "date": date, "name": name
   ]);
   
  
  useEffect(() => 
    socket.on('FromAPI', (date, name) => 
      setDate(date);
      setName(name);

      hook_event.unshift("date": date, "name": name);
      hook_event.pop();
    )
  , [];

  return (
    <>      
       <p>Date : hook_event[0].date and hook_event[0].name</p>
       <p>Date : hook_event[1].date and hook_event[1].name</p>
    </> 
  );
;

【问题讨论】:

而不是show_event.unshiftshow_event.pop 尝试使用setShow_event([ "name": name, "age": age , show_event[0]]) 非常感谢,我会努力的,我对 React 和 NodeJS 很陌生。 【参考方案1】:

我想我找到了问题。

    const [countState, setCountState] = useState() 

    useEffect(() => 
    socket.on('FromAPI', (date, name) => 
      setDate(date);
      setName(name);

      hook_event.unshift("date": date, "name": name);
      hook_event.pop();
      setCountState(hook_event[0])
    )
    , [setCountState]; // update setCountState

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Socket io 延迟一个事件的主要内容,如果未能解决你的问题,请参考以下文章

Node.js、Socket.io、Redis pub/sub 大容量、低延迟困难

Socket.IO 延迟发送

如何使用套接字(socket.io)在 NodeJS 中找到客户端的响应时间(延迟)?

触摸事件仅在 iOS 9 的左屏幕边缘附近延迟。如何解决?

iOS 7自定义键盘UIView触摸事件在底行延迟

如何在 iOS 中延迟 UISlider 的开始触摸事件?