błędu
Gdy użytkownik otworzy http://sync.aws.af.cm/, na wyświetlaczu konsoli JavaScript Google Chrome (w ciągu kilku sekund):Nieoczekiwany kod odpowiedzi: 502 Błąd podczas korzystania socket.io z AppFog
Unexpected response code: 502 error
aplikację powinien pamiętać zawartość obszaru tekstowego nawet po odświeżeniu strony przez użytkownika. Aplikacja działa lokalnie, ale nie po przesłaniu jej do AppFog i podejrzewam, że problem dotyczy błędu 502.
Czy wiesz, co może powodować ten błąd w tym przypadku?
Co Próbowałem
Próbowałem zmieniając ścieżkę w moim klientem script src=<path_to_socket_io>
z /socket.io/socket.io.js
do node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
opisanym here, ale to nie pomogło.
Próbowałem też obsługiwać aplikację w Heroku zamiast AppFog, ale w tym przypadku ciągle działałem w opisanym problemie here, mimo że podałem plik socket.io w wersji 0.9.6.
Przyjrzałem się także następującym pytaniom, ale komentarze do tej pory nie wydają mi się pomocne.
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
odpowiedni kod serwera
Oto odpowiedni kod serwera:
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);
odpowiedni kod klienta
<script src="/socket.io/socket.io.js"></script>
<script>
window.onload = function() {
...
var socket = io.connect(window.location.hostname);
socket.emit('getServerVariable');
...
};
...
log serwera
$ 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
ROZWIĄZANY: Jak opisano tutaj: http://stackoverflow.com/questions/11350279/socket-io-does-not-work-on-firefox-chrome Dodanie tego kodu rozwiązaniu problemu: io .configure ('development', function() { io.set ("transports", ['xhr-polling']); }); Ale nie rozumiem, dlaczego. Moje pytanie wydaje się być duplikatem istniejącego pytania. Jak zamknąć to pytanie i połączyć je z innym pytaniem? –
To nie jest ten sam problem. W dzienniku Node.js możesz zobaczyć inne pytanie, że aplikacja wstrzymuje się przed połączeniami internetowymi, zanim spadnie z powrotem, podczas gdy twoja osoba od początku zgłasza nieprawidłowe połączenie. –