首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >套接字io延迟一个事件

套接字io延迟一个事件
EN

Stack Overflow用户
提问于 2021-10-01 09:12:56
回答 1查看 92关注 0票数 1

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

代码语言:javascript
运行
复制
// 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}`);
});

代码语言:javascript
运行
复制
// 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>
    </> 
  );
};

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-05 04:56:50

我想我找到问题所在了。

代码语言:javascript
运行
复制
    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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69403402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档