2016-07-07 23 views
0

Wir haben socket.io in unserem node.js Server eingerichtet. Wir versuchen den Socket.io Java Client und den Socket.io iOS Client zu verwenden. Wir können uns über iOS verbinden, aber wir können keine Verbindung über Android herstellen. Wir haben keine Ahnung, warum Android keine Verbindung herstellt.Socket.io Android Client funktioniert nicht, aber iOS Client funktioniert

Server Side:

var socketIO = require('socket.io'); 
//var io = 

GLOBAL._io = socketIO(httpServer); 
_io.on('connection', (socket) => { 
    console.log('Client connected'); 
    setInterval(() => _io.emit('time', new Date().toTimeString()), 1000); 
socket.on('disconnect',() => console.log('Client disconnected')); 
}); 

Android funktioniert nicht

public void addSocketConnection() throws URISyntaxException { 

     Log.i("Socket.io","Init"); 

     mSocket = IO.socket("http://dev.myapp.com/parse"); 
     mSocket.on(Socket.EVENT_CONNECT,onConnect); 
     mSocket.on("time",onTime); 
     mSocket.on(Socket.EVENT_DISCONNECT,onDisconnect); 
     mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError); 
     mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError); 
     mSocket.connect(); 

     Log.i("Socket.io","Connect"); 
    } 
    private Emitter.Listener onTime = new Emitter.Listener() { 
     @Override 
     public void call(Object... args) { 

      Log.i("Socket.io","OnTime"); 

     } 
    }; 

    private Emitter.Listener onConnect = new Emitter.Listener() { 
     @Override 
     public void call(Object... args) { 

      Log.i("Socket.io","OnConnect"); 

     } 
    }; 

    private Emitter.Listener onDisconnect = new Emitter.Listener() { 
     @Override 
     public void call(Object... args) { 

      Log.i("Socket.io","DisConnect"); 

     } 
    }; 

iOS Arbeits

NSURL* url = [[NSURL alloc] initWithString:@"http://dev.myapp.com/parse"]; 
SocketIOClient* socket = [[SocketIOClient alloc] initWithSocketURL:url options:@{@"log": @YES, @"forcePolling": @YES}]; 

[socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) { 
    NSLog(@"socket connected"); 
}]; 
[socket onAny:^(SocketAnyEvent *event) { 
    NSLog(@"On any event :%@",event.event); 

}]; 

[socket on:@"time" callback:^(NSArray* data, SocketAckEmitter* ack) { 
    NSLog(@"Time %@",data[0]); 
}]; 

[socket connect]; 
+0

haben Sie versucht auf in AndroidManifest.xml Datei? – mryuso92

+1

OP hat eine Lösung gefunden und in [this github issue] (https://github.com/socketio/socket.io-client-java/issues/327#issuecomment-232854670) veröffentlicht. – Keith

+0

Ja, ich habe vergessen, bei StackOverflow zu aktualisieren. Habe nur die Antwort hinzugefügt. – partikles

Antwort

0

I hav e repariert und aktualisiert in GitHub und vergessen, hier zu aktualisieren. github issue link

Ein wenig Verwirrung, aber behoben, um an beiden zu arbeiten.

Wir haben Parse-Server-URL: "http://dev.myapp.com/parse" Unsere Knoten URL: "http://dev.myapp.com/"

Durch Fehler, den wir für iOS URL "http://dev.myapp.com/parse" zeigen, es funktioniert. Also zeigen wir auf die gleiche URL für Android, es funktioniert nicht.

Dann änderten wir beide URLs zu "http://dev.myapp.com", jetzt arbeiten auf iOS und Android.

Hinweis: Wir haben keine Ahnung, warum iOS arbeitet für "http://dev.myapp.com/parse"

Verwandte Themen