Aquí está el código de mi servidor de socket
const io = require("socket.io")(8080, { cors: { // origin: "http://localhost:3000", origin: "https://mern-bubble.herokuapp.com", }, });y herer es mi código del lado del cliente
useEffect(() => { // socket.current = io("ws://localhost:8800"); socket.current = io("ws://mern-bubble.herokuapp.com:8800"); socket.current.on("getUser", (data) => { console.log("data from socket", data); dispatch(updateUserInfo(data)); }); }, [dispatch]);Funciona completamente bien cuando estoy trabajando en localhost, pero cuando implemento mi proyecto en heroku, ¿socket.io no responde nada?
Entonces creo que el puerto 8800 no está abierto en heroku. Debe ceñirse al puerto 3000 e intentarlo de nuevo. https://devcenter.heroku.com/articles/node-websockets#option-2-socket-io
El puerto de Heroku se asigna dinámicamente al iniciar un Dyno. En lugar de codificar el puerto 8800 , use la variable de entorno $PORT en su lugar.
Primero asegúrese de haber ingresado el comando:
heroku features:enable http-session-affinity
Estuve atascado en un problema similar cuando tuve todo correcto durante días, solo necesitaba habilitarlo en cli. Referencia: https://devcenter.heroku.com/articles/node-websockets
En el lado del cliente, debe ingresar la URL del sitio con https:// (dependiendo condicionalmente de la ubicación actual de la ventana o del valor de node_env):
const newSocket = io('https://my-app.herokuapp.com', { transports: ["websocket"] } );En el lado del servidor, mi aplicación MERN funcionó al tener un solo servidor con un puerto de 5050 y no tener que configurar nada en particular para el servidor de socket:
import { Server } from "socket.io"; const server = http.createServer(app) export const io = new Server(server, { cors: { origin: 'https://my-app.herokuapp.com', methods: ["GET", "POST"], // allowedHeaders: ["my-custom-header"], credentials: true } })Si funciona localmente y todas sus direcciones URL son correctas, intente ingresar el comando mencionado anteriormente o consulte los documentos websocket del nodo heroku.