Ayush Niroula
Ayush Niroula

Reputation: 11

Why socketIo is connecting multiple times for single client?

Server code Console logging User connected message every second for single client connection

    import express from "express"
    import http from "http"
    import cors from "cors" 
    import dotenv from "dotenv"
    import movieRoute from './routes/movieRoute.js'
    import ContentRoutes from "./routes/ContentRoute.js"
    import userRoutes from "./routes/userRoutes.js"
    import connectDB from "./config/db.js"
    import axios from "axios"
    const app = express()
    const server = http.createServer(app)
    dotenv.config()
    connectDB()


    const io= socketIo(server)


    app.use(cors())
    app.use(express.json())

    io.on("connection",socket=>{
    console.log("user connected")
})
 
    app.use("/api/users",userRoutes)
    app.use("/api/content",ContentRoutes)
    app.use('/api/movie',movieRoute)

    app.get("/",(req,res)=>{
    
    res.send("APi is running")
   })

   const PORT = process.env.PORT || 5000
    server.listen(PORT,console.log(`Server listening in port ${PORT}`))

React Code Match here changes only one time but myserver is console logging the message userConnected simutenously

   let socket
  useEffect(()=>{
      socket= io("http://localhost:5000")
  },[match])

Upvotes: 0

Views: 125

Answers (1)

BENARD Patrick
BENARD Patrick

Reputation: 30975

Have you tried to set it only once time ?

  const [socket, setSocket] = useState(null)

  useEffect(()=>{
      if (socket === null) {
         setSocket(io("http://localhost:5000"))
      }
  },[match])

Upvotes: 1

Related Questions