This is Node.js server code.
Server.js
const express = require("express");
const cors = require("cors");
const http = require("http");
const SocketServer = require("./config/socket");
require('dotenv').config();
const corsOptions = {
origin: "*",
credentials: true,
};
const app = express();
app.use(cors(corsOptions));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
const server = http.createServer(app);
const io = SocketServer(server);
app.use((req, res, next) => {
req.body.io = io;
next();
});
const port = process.env.PORT || 5000;
server.listen(port, () => {
console.log(`Sever running on port ${port}`);
})
.config/socket.js
const socketIO = require("socket.io");
const SocketServer = (server) => {
const io = socketIO(server, {
cors: {
orgin: "*",
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
preflightContinue: false,
optionSuccessStatus: 204,
},
});
io.on("connection", (socket) => {
console.log(`Socket ${socket.id} connected`);
socket.on("disconnect", () => {
console.log(`Socket ${socket.id} disconnected`);
});
});
return io;
};
module.exports= SocketServer
This is React.js client code
import { io } from "socket.io-client";
React.useEffect(() => {
const socket = io(`${process.env.REACT_APP_BACKEND_URL}`, {
transports: ['websocket']
});
socket.on('send', (data) => {
})
socket.on('buy', (data) => {
})
return () => {
socket.disconnect();
};
}, []);
In case of localhost, REACT_APP_BACKEND_URL = http://localhost:5000, the socket.io works well. But In case of domain, REACT_APP_BACKEND_URL = https://abcd.com (ex), the socket.io doesn't work
websocket.js:43 WebSocket connection to 'wss://abcd.com/socket.io/?EIO=4&transport=websocket' failed: WebSocket opening handshake timed out
Please help me to fix the issue.
Thanks