2016-12-12 7 views
1

Ich habe Probleme, eine Verbindung zwischen socket.io Server und socket.io Client in Apache Cordova Anwendung. Es wird nur keine Verbindung zum Server hergestellt, den ich in node.js ausführe.Cordova Socket io xhr Umfrage Fehler

Mein socket.io Server-Code lautet wie folgt:

var server = require('http').createServer(); 
var io = require('socket.io')(server); 

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

    socket.on('disconnect', function() { 
     console.log('socket disconnected'); 
    }); 

    socket.emit('text', 'wow. such event. very real time.'); 
}); 

server.listen(3000); 

Code Meine cordova js sich wie folgt:

document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    console.log("Hello from app 1234"); 
    var socket = io('http://localhost:3000', {reconnect: true}); 
    console.log("socket created"); 
    socket.on('connect', function() { 
     console.log("Connection created!"); 
     alert("connection ok"); 
     socket.on('text', function(text) { 
      alert(text); 
     }); 
    }); 
} 

Wenn ich es vor Ort in meinem Browser ausführen mit cordova dienen, es läuft fein. Auch ist es in Ordnung, wenn ich eine normale XMLHttpRequest() zu einem Server, ich testete es und konnte JSON gut erhalten.

Fehler:

"socket.io-client:manager connect_error +49ms" 
"engine.io-client:socket socket error %j +50ms",Error: xhr poll error 
"socket.io-client:manager connect attempt will timeout after %d  +113ms",20000 
"engine.io-client:polling-xhr xhr poll +5s" 
"engine.io-client:polling-xhr xhr data %s +1ms",null 
"engine.io-client:socket setting transport %s +110ms","polling" 
"engine.io-client:polling-xhr xhr open %s: %s +28ms","GET","http://localhost:3000/socket.io/?EIO=2&transport=polling&t=1481551911376-8" 

Was mein Problem sein könnte und wie könnte ich es debuggen weiter?

EDIT: Ich teste es auf Emulator mit cordova emulate android

+0

Sie testen also von einem echten Gerät? – Beat

+0

@Beat Bearbeitet, ich teste es auf Emulator – taivo

Antwort

2

Mit localhost auf einem echten device oder sogar auf einem emulator, bezieht sich immer auf die ip des Gerätes oder Emulator selbst. Dies erklärt auch, warum es in Ihrem browser mit cordova serve funktioniert.

Anstatt localhost zu verwenden, müssen Sie die lokale IP Ihres Computers verwenden. Sie können es zum Beispiel von Windows-Befehl promt (z. B. cmd.exe) mit ipconfig erhalten.