2012-09-24 7 views
17

Der Fehler

Wenn der Benutzer http://sync.aws.af.cm/ öffnet, die Google Chrome JavaScript-Konsole zeigt (innerhalb weniger Sekunden):Unexpected Antwortcode: 502 Fehler bei der Verwendung von socket.io mit AppFog

Unexpected response code: 502 error 

Die App sollte sich den Inhalt des Textbereichs merken, auch nachdem der Benutzer die Seite aktualisiert hat. Die App funktioniert zwar lokal, aber nicht, wenn ich sie in AppFog hochlade, und ich vermute, dass das Problem der Fehler 502 ist.

Wissen Sie, was diesen Fehler in diesem Fall verursachen könnte?

Was ich versucht habe

ich in meinem Klienten /socket.io/socket.io.js-node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js wie here den script src=<path_to_socket_io> Weg versucht zu ändern, aber es half nicht.

Ich versuchte auch die App bei Heroku statt AppFog, aber in diesem Fall lief ich weiter in das Problem here beschrieben, obwohl ich socket.io Version 0.9.6 angegeben.

Ich habe mir auch die folgenden Fragen angeschaut, aber die Kommentare scheinen mir bisher nicht zu helfen.

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

Relevante Servercode

Hier ist der relevante Code-Server:

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); 

Relevante Client-Code

<script src="/socket.io/socket.io.js"></script> 

<script> 
    window.onload = function() { 
    ... 
    var socket = io.connect(window.location.hostname); 
    socket.emit('getServerVariable'); 
    ... 
    }; 
... 

Server-Protokoll

$ 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 
+1

BESCHLOSSEN: Wie hier beschrieben: http://stackoverflow.com/questions/11350279/socket-io-does-not-work-on-firefox-chrome diesen Code Hinzufügen das Problem behoben: io .configure ('Entwicklung', Funktion() { io.set ('transports', ['xhr-polling']); }); Aber ich verstehe nicht warum. Nun scheint meine Frage ein Duplikat einer bestehenden Frage zu sein. Wie schließe ich diese Frage und verknüpfe sie mit der anderen Frage? –

+0

Dies ist nicht das gleiche Problem. Sie können aus dem Node.js-Protokoll in der anderen Frage sehen, dass die Anwendung über Websockets handshaking vor dem Zurückfallen, während Ihre eine ungültige Verbindung von Anfang an behauptet. –

Antwort

29

AppFog WebSockets noch nicht unterstützt. Nach ihrer kürzlichen Übernahme von Nodester gaben sie bekannt, dass es in ein paar Monaten kommen würde.

Durch Hinzufügen von io.set('transports', ['xhr-polling']); setzen Sie den Transport auf Ajax Long Polling. Standardmäßig ermittelt Socket.io den besten Transport basierend auf den Browserfunktionen und der aktuellen Verbindung. WebSockets ist ideal, wenn es verfügbar ist, aber wenn es nicht Socket.io ist, wird es unter anderen Transporten auf xhr-polling zurückgreifen.

Ich habe den gleichen Fehler selbst bei der Verwendung von CloudFlare, die auch nicht Proxy-Websocket-Verbindungen über seine Nginx-basierte Infrastruktur (beachten Sie, dass ab 2014 kann Cloudflare Proxy-Websockets, wenn Sie auf einem Premium-Plan sind).

+0

ENDLICH fand ich was los war! Vielen Dank für diese Antwort. – LordZardeck

+1

Für diejenigen, die CF verwenden, löst diese Konfiguration das gleiche Problem bei Cloudfoundry + Heroku. Danke Wes! – Gary

+0

Danke für das Cloudflare-Bit, es hat mir geholfen – GiveMeAllYourCats

Verwandte Themen