Socket.io + NodeJS ne fonctionne pas sur Heroku

Je suis en train de faire une API et c'est sur Heroku. Mais je vais avoir quelques problèmes avec le socket.io uniquement sur le heroku côté, quand je l'ai tester en local tout va bien. L'API est complètement indépendant de l'interface, ainsi ils sont dans des domaines différents (et un des hôtes différents). Le problème est que sur la production, je n'ai pas réussir à se connecter les prises...

J'ai quelques questions, tout de qui sont sur le support.io configuration sur heroku. Je sais qu'il y a certains postes avec quelques informations à ce sujet, mais les messages j'ai trouvé que c'était avec les anciennes versions de sockets.io ou les anciennes versions de heroku (heroku semble qu'il a changé les websockets des choses du passé juillet):

  • Je ne sais pas si je dois activer quelque chose avant de lancer la socket.io sur heroku. J'ai lu quelques posts sur le sujet, mais tout semble être vieux... j'ai essayé d'activer les Websockets avec: $ heroku labs:enable websockets mais la réponse que j'ai reçu était: ! No such feature: websockets.

  • Dois-je spécifier un port, ou Heroku dispose d'un dispositif de port pour qui?

  • Faire j'ai besoin de deux connexions? Un pour écouter la POST/GET/PUT/DELETE et un autre pour les 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;
    };
}

Je le répète, tout fonctionne sur localhost. J'ai essayé de l'API sur localhost:5000 et l'application cliente sur localhost:80 et toutes les prises, beau travail.

Merci.

pourriez-vous aller à la ligne de commande et tapez heroku logs et laissez-moi savoir ce que vous voyez?

OriginalL'auteur newpatriks | 2014-07-29