在StakOverflow和其他论坛上阅读了许多子主题之后,我找到了适用的解决方案。此解决方案适用于不使用Express的情况。
这是前提条件。
服务器端
var fs       = require('fs'),
    winston  = require('winston'),
    path     = require('path');
const logger = winston.createLogger({
    level     : 'info',
    format    : winston.format.json(),
    transports: [
        new winston.transports.Console({ level: 'debug' }),
        new winston.transports.File({ filename: 'err.log', level: 'err' }),
        new winston.transports.File({ filename: 'combined.log' })
    ]
});
const Port          = 9000,
      certsPath     = '/etc/letsencrypt/live/my.domain.com/';
var server = require('https').createServer({
    key:                fs.readFileSync(certsPath + 'privkey.pem'), 
    cert:               fs.readFileSync(certsPath + 'cert.pem'), 
    ca:                 fs.readFileSync(certsPath + 'chain.pem'), 
    requestCert:        false, 
    rejectUnauthorized: false 
},
(req, res) => {
    var filePath = '.' + req.url;
    logger.info('FILE ASKED : ' + filePath);
    
    if (filePath == './')
        filePath = './index.html';
    var extname = path.extname(filePath);
    var contentType = 'text/html';
    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
        case '.json':
            contentType = 'application/json';
            break;
        case '.png':
            contentType = 'image/png';
            break;      
        case '.jpg':
            contentType = 'image/jpg';
            break;
        case '.wav':
            contentType = 'audio/wav';
            break;
    }
    var headers = {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
        'Access-Control-Max-Age': 2592000, 
        'Content-Type': contentType
    };
    fs.readFile(filePath, function(err, content) {
        if (err) {
            if(err.code == 'ENOENT'){
                fs.readFile('./errpages/404.html', function(err, content) {
                    res.writeHead(404, headers);
                    res.end(content, 'utf-8');
                });
            }
            else {
                fs.readFile('./errpages/500.html', function(err, content) {
                    res.writeHead(500, headers);
                    res.end(content, 'utf-8');
                });
            }
        }
        else {
            res.writeHead(200, headers);
            res.end(content, 'utf-8');
        }
    });
    if (req.method === 'OPTIONS') {
        res.writeHead(204, headers);
        res.end();
    }
}).listen(port); 
var io = require('socket.io')(server).on('connection', function(s) {
    logger.info("SERVER > Socket opened from client");
    
});
客户端
<script src="https://my.domain.com:port/js/socket.io.js"></script>
<script>
    $(document).ready(function() {
        $.socket = io.connect('https://my.domain.com:port', {
            secure: true 
        });
        
    });
</script>