2012-10-25 3 views
3

J'ai une application Node.js sur Heroku. J'ai récemment changé une longue requête pour utiliser SSE (EventSource). Alors que cela fonctionne très bien et rapidement sur ma machine, je continue d'obtenir un Error H15 (Idle connection) sur ma requête GET. La description H15 dit que je suis allé plus de 55 secondes autorisées par transaction. Mais toute ma requête ne prend pas plus de 4-5 secondes.H15 sur requête SSE Heroku

En outre, après avoir lu la description, je retourne mon premier octet (juste un nombre) immédiatement après avoir tapé la requête, avant qu'il ne commence un gros travail - et cela ne fonctionne toujours pas.

Ma question/s sont:

  1. Que dois-je faire pour garder cette chose va? Un paramètre d'en-tête HTTP? Quelque chose du coté JS du client? Comment éviter H15? Est-ce que j'essaie de faire quelque chose qui n'est pas supporté par Heroku? Je ne pense pas, comme je l'ai une autre application sur Heroku qui utilise avec succès EventSource (express-eventsource.herokuapp.com, source sur GitHub: https://github.com/TravelingTechGuy/express-eventsource)

Comme toujours, merci pour votre temps.

Répondre

7

Après avoir essayé tout, changer et réécrivant mon code, le profilage du réseau, etc., enfin mon ami (sans connaissance du nœud que ce soit) est venu avec une idée qui m'a mis sur la bonne voie:

Il semble que c'est un problème de domaine - pas un problème de code du tout.
J'ai mis un mappage ANAME et il s'avère que puisque Heroku utilise 5 adresses IP différentes, le mappage à un seul d'entre eux peut bousiller un appel SSE. Fondamentalement, mydomain.com a montré un IP différent de mydomain.herokuapp.com - signifiant que le serveur a essayé de renvoyer une réponse à une IP différente de celle qui a initié l'appel, par conséquent il a expiré.

J'ai abandonné l'ANAME en faveur d'un CNAME (essentiellement, en abandonnant mydomain.com nu en faveur de www.mondomaine.com) et maintenant il semble fonctionner.

Conclusions:

  1. Pas tout est une question de code - si cela fonctionne bien dans un environnement et non dans un autre, il est un problème de configuration
  2. Si vous luttez avec quelque chose pour trop longtemps, il aide à apporter un nouvel ensemble d'yeux. Même si vous n'avez aucune expertise en la matière, vous trouverez de bonnes idées d'approches nouvelles que vous pouvez essayer.
  3. 1and1 Le contrôle DNS aspire b @ lls. Sortir de là
+0

Juste une courte mise à jour: il a été en effet, un problème de domaine. Tout fonctionne bien (quoique lent - libre Heroku == lent Heroku :)). –

+0

Ahh ce problème est en effet agaçant. Pouvez-vous élaborer en passant de ANAME à CNAME? –

+0

Fondamentalement, cela signifie ne pas utiliser de noms de domaine «nus», comme mydomain.com. En fonction de votre contrôle DNS (j'utilise GoDaddy), vous devriez pouvoir définir un sous-domaine (CNAME) via la gestion DNS. Voir plus ici: https://devcenter.heroku.com/articles/custom-domains –

1

J'ai rencontré le même problème avec une application Meteor. Soudain, chaque interaction renvoyait une erreur websocket sur l'application et une erreur h15 sur l'heroku. Je l'ai résolu en changeant l'URL racine à un domaine nu, puis en transmettant le domaine nu à un www.example.com. J'espère que cela aidera aussi quelqu'un. Je également totaly d'accord avec @TravelingTechGuy sur

Pas tout est une question de code - si cela fonctionne bien dans un environnement et non dans un autre, il est un problème de configuration