El error
Cuando el usuario abre http://sync.aws.af.cm/, los programas de Google Chrome JavaScript Console (dentro de unos pocos segundos):código de respuesta inesperada: 502 error al utilizar socket.io con AppFog
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 cargo en AppFog, y sospecho que el problema es el error 502.
¿Sabes qué podría causar este error en este caso?
Lo que he tratado
He intentado cambiar la ruta de script src=<path_to_socket_io>
en mi cliente /socket.io/socket.io.js
-node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
como se describe here, pero no sirvió de nada.
También traté de servir la aplicación en Heroku en lugar de AppFog, pero en ese caso me encontré con el problema descrito here aunque especifiqué socket.io versión 0.9.6.
También he mirado las siguientes preguntas, pero los comentarios hasta ahora no parecen ayudarme.
socket.io creating 502 Bad Gateway on connect/websocket invalid
Socket.IO node.js websocket connection invalid port 8081
socket.io with node.js not working as expected
código de servidor pertinente
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
resolvió: Como se describe aquí: http://stackoverflow.com/questions/11350279/socket-io-does-not-work-on-firefox-chrome La adición de este código fijo el problema: io .configure ('desarrollo', función() { io.set ('transportes', ['xhr-polling']); }); Pero no entiendo por qué. Ahora, mi pregunta parece ser un duplicado de una pregunta existente. ¿Cómo cierro esta pregunta y la relaciono con la otra pregunta? –
Este no es el mismo problema. Puede ver en el registro Node.js en la otra pregunta que la aplicación es el protocolo de enlace sobre websockets antes de retroceder, mientras que el suyo reclama una conexión no válida desde el inicio. –