'Socket.io Error on server

I am tried to use socket io on the live server and I got this error.

polling-xhr.js:264 GET http://sub.domain.com:3000/socket.io/?EIO=3&transport=polling&t=MFUVMS5 net::ERR_TIMED_OUT

But on my local server, the files worked perfectly. I am working with socket.io and PHP.

Here are my codes:

server.js

var socket = require('./node_modules/socket.io');
var express = require('./node_modules/express');
var app = express();
var server = require('http').createServer(app);
var io = socket.listen(server);
var port = process.env.PORT || 3000;

// server active console view
server.listen(port, function () {
    console.log('Server listening at port %d', port);
});

io.on('connection', function (socket) {

    // show new added online user
    socket.on('now_online', function (data) {
        io.sockets.emit('now_online',{
            id: data.id,
            name: data.name
        });
    });
});

main.js

var socket = io.connect('http://'+window.location.hostname+':3000');
socket.on('new_online_user', function (data) {
    if (login_id != data.online_user) {
        $('#contacts-list .contact[data-chat='+data.online_user+']'+' .contact-status').addClass('online');
    }
});

package.json

{
  "private": true,
  "dependencies": {
    "gulp": "^3.9.1",
    "express": "^4.16.2",
    "socket.io": "^2.0.4"
  }
}

I was searching in google and StackOverflow about this issue but those solved didn't work for me.

Thanks so much.



Solution 1:[1]

Try connecting using only domain without http like:

var socket = io.connect(window.location.hostname+':3000', {transports: ["websocket", "xhr-polling", "htmlfile", "jsonp-polling"]});

It will automatically become ws://sub.domain.com:3000/socket.io/?EIO=3&transport=polling&t=MFUVMS5. I'm using similar to this and working fine.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1