node.js - example - Código de respuesta inesperado: error 502 al usar socket.io con AppFog
socket io tutorial (1)
AppFog no soporta websockets todavía. Tras la reciente adquisición de Nodester, anunciaron que llegaría en unos meses.
Al agregar io.set(''transports'', [''xhr-polling'']);
solo está configurando el transporte a largo ajax de sondeo. De forma predeterminada, Socket.io determina el mejor transporte según las capacidades del navegador y la conexión actual. Websockets es ideal, cuando está disponible, pero si no es Socket.io, volverá al sondeo xhr entre otros transportes.
Recibí el mismo 502 unexpected response / bad gateway
error de 502 unexpected response / bad gateway
error de 502 unexpected response / bad gateway
incorrecto cuando utilizo CloudFlare, que tampoco puede establecer conexiones a través de su infraestructura basada en nginx (tenga en cuenta que a partir de 2014, Cloudflare puede usar proxy para los sockets web si está en un plan premium).
El error
Cuando el usuario abre http://sync.aws.af.cm/ , la consola de JavaScript de Google Chrome muestra (en unos pocos segundos):
Unexpected response code: 502 error
La aplicación debe recordar el contenido del área de texto incluso después de que el usuario actualice la página. La aplicación funciona localmente, pero no cuando la subo a AppFog, y sospecho que el problema es el error 502.
¿Sabes qué podría causar este error en este caso?
Lo que he intentado
Intenté cambiar la ruta del script src=<path_to_socket_io>
en mi cliente de /socket.io/socket.io.js
a node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
como se describe here , pero no ayudó.
También intenté servir la aplicación en Heroku en lugar de AppFog, pero en ese caso seguí encontrando el problema descrito here a pesar de que especifiqué la versión 0.9.6 de socket.io.
También he mirado las siguientes preguntas, pero los comentarios hasta ahora no parecen ayudarme.
socket.io creando 502 Bad Gateway on connect / websocket inválido
Socket.IO node.js conexión websocket no válido puerto 8081
socket.io con node.js no funciona como se esperaba
Código de servidor relevante
Aquí está el código del servidor relevante:
var server = http.createServer(function (req, res) {
...
});
var io = require(''socket.io'').listen(server);
// Define events that can be triggered by the client
io.sockets.on(''connection'', function (socket) {
socket.on(''setServerVariable'', function (value) {
...
});
...
});
server.listen(process.env.VCAPP_APP_PORT || 3000);
Código de cliente relevante
<script src="/socket.io/socket.io.js"></script>
<script>
window.onload = function () {
...
var socket = io.connect(window.location.hostname);
socket.emit(''getServerVariable'');
...
};
...
Registro del servidor
$ af logs sync
====> /logs/stdout.log <====
info: socket.io started
debug: served static content /socket.io.js
debug: client authorized
info: handshake authorized veNnUVtoDTIz-oudG7Pa
debug: setting request GET /socket.io/1/websocket/veNnUVtoDTIz-oudG7Pa
debug: set heartbeat interval for client veNnUVtoDTIz-oudG7Pa
warn: websocket connection invalid
info: transport end (undefined)
debug: set close timeout for client veNnUVtoDTIz-oudG7Pa
debug: cleared close timeout for client veNnUVtoDTIz-oudG7Pa
debug: cleared heartbeat interval for client veNnUVtoDTIz-oudG7Pa
debug: served static content /socket.io.js
debug: client authorized
info: handshake authorized 6AKyhROUNjqujk_uG7Pb
debug: setting request GET /socket.io/1/websocket/6AKyhROUNjqujk_uG7Pb
debug: set heartbeat interval for client 6AKyhROUNjqujk_uG7Pb
warn: websocket connection invalid
info: transport end (undefined)
debug: set close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: cleared close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: cleared heartbeat interval for client 6AKyhROUNjqujk_uG7Pb
debug: setting request GET /socket.io/1/xhr-polling/6AKyhROUNjqujk_uG7Pb?t=1348504130465
debug: setting poll timeout
debug: client authorized for
debug: clearing poll timeout
debug: xhr-polling writing 1::
debug: set close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: setting request GET /socket.io/1/xhr-polling/6AKyhROUNjqujk_uG7Pb?t=1348504130724
debug: setting poll timeout
debug: discarding transport
debug: cleared close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: xhr-polling received data packet 5:::{"name":"getServerVariable"}
debug: clearing poll timeout
debug: xhr-polling writing 5:::{"name":"printLog"}
debug: set close timeout for client 6AKyhROUNjqujk_uG7Pb
server.js: getServerVariable:
debug: setting request GET /socket.io/1/xhr-polling/6AKyhROUNjqujk_uG7Pb?t=1348504130980
debug: setting poll timeout
debug: clearing poll timeout
debug: xhr-polling writing ���23���5:::{"name":"printLog"}���39���5:::{"name":"setItemValue","args":[""]}���23���5:::{"name":"printLog"}
debug: set close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: discarding transport
debug: cleared close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: setting request GET /socket.io/1/xhr-polling/6AKyhROUNjqujk_uG7Pb?t=1348504131261
debug: setting poll timeout
debug: discarding transport
debug: cleared close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: clearing poll timeout
debug: xhr-polling writing 8::
debug: set close timeout for client 6AKyhROUNjqujk_uG7Pb
debug: xhr-polling closed due to exceeded duration
debug: setting request GET /socket.io/1/xhr-polling/6AKyhROUNjqujk_uG7Pb?t=1348504151659
debug: setting poll timeout
debug: discarding transport
debug: cleared close timeout for client 6AKyhROUNjqujk_uG7Pb