2015-05-24 11 views
5

Ho un'applicazione che utilizza socket.io e socket.emit() non funziona da Chrome mobile (su Android e iOS). Vedo che il socket.emit() viene eseguito nel browser. Ma le mie istruzioni console.log sul lato server in socket.on() non sono in esecuzione, quindi penso che i messaggi non arrivino. Neanche io vedo errori nella console.socket.emit non funziona in chrome mobile (ma funziona in modalità in incognito)

È interessante notare che tutto funziona correttamente in modalità di navigazione in incognito, oltre a tutte le modalità di altri browser mobili come Safari.

Qualsiasi soluzione o aiuto nel debug sarebbe utile.

EDIT:

CODICE CLIENTE LATO

$(document).ready(function(){ 
    socket = io(); 
    $(".check").on("submit", function(event){ 
     event.preventDefault(); 
     ga('send','event','evt','evt123'); 
     socket.emit('checkRoom', { rId: "12345", pId: "johndoe"}); 
    }); 
}); 

CODICE Server Side

io.on('connection', function(socket) { 
    console.log('a user connected'); 

    socket.on('check',function(e){ 
     console.log('Entered check'); 
     socket.emit('check','server message'); 
    }); 
}); 

EDIT2:

ho specificato manualmente il file socket.io-1.3.5.js sul lato client (invece di utilizzare il valore predefinito /socket.io/socket.io.js) e avviato vedere ing questo errore nella console:

WebSocket connection to 'ws://mydomain.com/socket.io/?EIO=3&transport=websocket&sid=wr8UpsT45lrWHtpMACJs' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT 
+0

Probabilmente avremo bisogno di vedere il codice rilevante per noi per avere un'idea di cosa potrebbe succedere qui. – jfriend00

+0

Come vedi esattamente che 'socket.emit' sta funzionando dal client? Hai messo un 'console.log' prima o dopo? Stai ancora ricevendo "un utente connesso" sul server che significa che il socket si connette ma che emette dal client non viene ricevuto? Prova a inserire un paio di 'socket.emit/on ('test')' (con i messaggi di log della console appropriati) sia sul server che sul client che si attivano senza alcuna interazione solo per vedere se la comunicazione avviene almeno al primo contatto o se il i problemi iniziano più tardi. – laggingreflex

+0

@laggingreflex: ho usato i breakpoint per vedere che il codice sta per 'socket.emit'. Ho provato con un codice molto semplice per verificare se il primo contatto sta accadendo, e posso vedere che i messaggi non arrivano sul server. –

risposta

0

Alcuni dei telefoni richieste reti di proxy sulla porta 80, che possono rompere i socket web. Ciò non spiegherebbe perché funzionerebbe in altri browser o in incognito, ma puoi verificare questa ipotesi, spostando il tuo server e il tuo client per connettersi su una porta diversa, ad es. 81.