Socket.io + NodeJS funktioniert nicht auf Heroku

Ich mache eine API und es ist auf Heroku. Aber ich habe einige Probleme mit der socket.io nur auf der Heroku-Seite, wenn ich es in der lokalen teste, geht alles in Ordnung. Die API ist völlig unabhängig vom Frontend, daher befinden sie sich in unterschiedlichen Domänen (und auf unterschiedlichen Hosts). Das Problem ist, dass es mir in der Produktion nicht gelingt, die Buchsen anzuschließen ...

Ich habe einige Fragen, die sich alle mit der socket.io-Konfiguration auf Heroku befassen. Ich weiß, dass es einige Posts mit einigen Informationen dazu gibt, aber die Posts, die ich gefunden habe, waren mit alten Versionen von sockets.io oder alten Versionen von heroku (heroku hat anscheinend die Websockets-Inhalte im vergangenen Juli geändert):

Ich weiß nicht, ob ich etwas aktivieren muss, bevor ich socket.io auf heroku starte. Ich habe einige Posts darüber gelesen, aber alles scheint alt zu sein ... Ich habe versucht, Websockets zu aktivieren mit:$ heroku labs:enable websockets Aber die Antwort, die ich bekam, war:! No such feature: websockets.

Muss ich einen Port angeben, oder hat Heroku dafür einen automatischen Port?

Benötige ich zwei Anschlüsse? Einer zum Abhören des POST / GET / PUT / DELETE und einer zum Abhören der Sockets?

app.js

    var express = require('express');
    var app = module.exports = express();
    var port = process.env.PORT || 5000;
    var port_s = 3000;
    var server = require('http').createServer(express);
    ...
    app.listen(port);
    server.listen(port_s);

    require('./config/socket-io')(app, server, secret);
    app.post('/user', routes.users.register);
    ...

socket-io.js

module.exports = function(app, server, secret) {
    var clients = {};
    console.log("initiating sockets...");
    var sio = require('socket.io').listen(server);

    sio.sockets.on('connection', function (socket) {
        clients[socket.id] = socket;
        console.log("...new connection: "+socket.client.id);
        socket.emit('identification', { data : socket.client.id });

        socket.on('newShoutOut', function(data) {
            var receptor    = data.idTo;
            var emiter      = socket.client.id;
            //console.log("...new shout out from " +emiter+ " to "+receptor);
            var elem = findElement(sio.sockets['sockets'], 'id', receptor);
            sio.sockets.sockets[elem].emit('privateShoutout',{ data : data.data, from : emiter });
        });

        socket.on('disconnect', function() {
            //console.log("..."+socket.client.id + " disconnected");
        });
    });
};

function findElement(arr, propName, propValue) {
    for (var i=0; i < arr.length; i++) {
        if (arr[i].id === propValue)
            return i;
    };
}

Ich wiederhole, alles funktioniert auf localhost. Ich habe die API auf localhost: 5000 und die Client-App auf localhost: 80 ausprobiert und alle Sockets funktionieren einwandfrei.

Danke.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage