Socket.io Android客户端无法运行但iOS客户端工作

时间:2016-07-07 12:26:52

标签: android ios objective-c websocket socket.io

我们在node.js服务器中设置了socket.io。我们尝试使用Socket.io Java Client和Socket.io iOS Client。我们可以通过iOS连接,但我们无法通过Android连接。我们没有任何线索,为什么Android没有连接。

服务器端:

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无效

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正常工作

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

1 个答案:

答案 0 :(得分:0)

我已经在github中修复并更新了,忘了在这里更新。github issue link

有点困惑,但修复了两者的工作。

我们有解析服务器网址:" http://dev.myapp.com/parse" 我们的节点网址:" http://dev.myapp.com/"

我们错误地指向了网址" http://dev.myapp.com/parse"对于iOS,它正在工作。 所以我们指向Android的相同网址,它无效。

然后我们将这两个网址更改为" http://dev.myapp.com",现在适用于iOS和Android。

注意: 我们不知道为什么iOS正在为#34; http://dev.myapp.com/parse"

工作