27 votes

Puis-je configurer le chat socket.io sur heroku?

J'ai une simple prise.io application de chat que j'ai téléchargé à l'un des nouveaux Heroku 'cèdre' piles.

Maintenant j'ai presque tout fonctionne, mais j'ai frappé une pierre d'achoppement. Sur mon localhost, j'ouvre une connexion vers le serveur socket du client:

// lots of HTML omitted
socket = new io.Socket('localhost', {port: 8888});

Mais sur Heroku, j'ai évidemment devez le remplacer par quelque chose d'autre pour ces valeurs.

Je peux obtenez le port de l'objet de processus sur le serveur comme ceci:

port = process.env.PORT || 8888

et passer à la vue.

Mais que dois-je remplacer 'localhost'?

21voto

Luke Chadwick Points 1172

La bonne façon selon l' article sur heroku est:

 io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});
socket = new io.Socket();
 

Cela garantit que io.Socket n'essaiera pas d'utiliser WebSockets.

12voto

Moolio Points 166

J'ai été en mesure d'obtenir Socket.IO v0.8 travailler sur Heroku de Cèdre en procédant comme suit:

Dans l'Express de l'application (en CoffeeScript dans mon cas):

app = express.createServer();
socket = require("socket.io")

...

io = socket.listen(app);
io.configure () ->
  io.set("transports", ["xhr-polling"])
  io.set("polling duration", 10)

io.sockets.on('connection', (socket) ->
  socket.on('myaction', (data) ->
    ...
    socket.emit('result', {myData: data})

### The port setting is needed by Heroku or your app won't start
port = process.env.PORT || 3000;
app.listen(port);


Et à l'intérieur de la face avant du Javascript de votre application:

var socket = io.connect(window.location.hostname);
function sendSocketRequest() {
  socket.emit('myaction', $("#some_field").val());
}

socket.on('result', function(data) {
  console.log(data);
}

Liens utiles:

9voto

Skeep Points 393

Cela a changé depuis octobre 2013, heroku a ajouté le support websocket:

https://devcenter.heroku.com/articles/node-websockets

Utilisation:

 heroku labs:enable websockets
 

Pour activer les websockets et n'oubliez pas de les supprimer:

 io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
}); 
 

6voto

David Tuite Points 5342

Après avoir essayé toutes les combinaisons sous le soleil, je l'ai finalement laissé vide. Et voilà qui fonctionne parfaitement. Vous n'avez même pas besoin du port.

 socket = new io.Socket();
 

1voto

davidfrancisco Points 101

J'avais aussi ce problème sur Heroku. J'ai pu le faire fonctionner en utilisant le nom d'hôte "myapp.herokuapp.com" (ou simplement window.location.hostname, pour travailler à la fois local et en production) et en définissant le port sur 80. J'utilise SocketIO 0.6.0.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X