Soy nuevo en WebSocket, así que estoy tratando de crear una aplicación que use WebSocket para actualizar en tiempo real. Aquí está mi código:
const PORT = process.env.PORT || 3000; const INDEX = "./index.html"; const socketIO = require("socket.io"); const express = require("express"); const app = express(); app.get("/", (req, res) => { res.sendFile(INDEX, { root: __dirname }); }); app.listen(PORT, () => { console.log("SERVER LISTENING ON PORT http://localhost:3000"); }); const io = socketIO(app); io.on("connection", (socket) => { console.log("Client connected"); socket.on("disconnect", () => console.log("Client disconnected")); });Este código arroja un error de la siguiente manera:
Error: está intentando adjuntar socket.io a una función de controlador de solicitud expresa. Pase una instancia de http.Server.
Pero cuando escribo el código de la siguiente manera:
const PORT = process.env.PORT || 3000; const INDEX = "/index.html"; const socketIO = require("socket.io"); const express = require("express"); const server = express() .get("/", (req, res) => res.sendFile(INDEX, { root: __dirname })) .use("/static", express.static("static")) .listen(PORT, () => console.log(`Listening on ${PORT}`)); const io = socketIO(server); io.on("connection", (socket) => { console.log("Client connected"); socket.on("disconnect", () => console.log("Client disconnected")); });Simplemente funciona.
Por favor, ayúdame ¿Qué está pasando aquí?
¡¡¡Gracias de antemano!!!
socket.io espera una instancia devuelta por el método app.listen (donde la aplicación es una instancia expresa)
En el primer fragmento de código, está pasando una instancia expresa que es incorrecta, como mencioné anteriormente
La solución para el primer fragmento de código, para que pueda entenderlo mejor
const PORT = process.env.PORT || 3000 const INDEX = './index.html' const socketIO = require('socket.io') const express = require('express') const app = express() const server = app.listen(PORT, () => { console.log('SERVER LISTENING ON PORT http://localhost:3000') }) const io = socketIO(server) app.get('/', (req, res) => { res.sendFile(INDEX, { root: __dirname }) }) io.on('connection', (socket) => { console.log('Client connected') socket.on('disconnect', () => console.log('Client disconnected')) })