2015-10-14 46 views
0

我似乎无法找出这一个。我正在测试socket.io的用法以将iOS客户端应用程序连接到Node.js服务器。我的服务器代码如下所示:Node.js socket.io没有响应iOS socket.io发出请求

var io = SocketIO(8099, { log: true }); 

io.on('connection', function (socket) { 

    socket.on('connect', function (data) { 
      console.log('Connected, data: ' + data); 
     }); 

    socket.on('getProjects', function(from, msg) { 
     database.allProjects(function getAllProjectsCallback(err, rows) { 
      console.log('Got the project list'); 
      socket.emit('projectList', rows); 
     }); 
    }); 

}); 

我的iOS代码开头:

_socket = [[SocketIOClient alloc] initWithSocketURL:@"http://localhost:8099" opts:nil]; 

    [_socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) { 
     NSLog(@"socket connected"); 
    }]; 

    [_socket on:@"projectList" callback:^(NSArray* data, SocketAckEmitter* ack) { 
     NSLog(@"Project list received"); 
     [ack with:@[]]; 
    }]; 

    [_socket connect]; 

而在另一种方法,我有这样的代码应该发送GET项目要求:

[_socket emit:@"getProjects" withItems:@[]]; 

我可以在日志中看到iOS“套接字连接”消息。但不是Node.js“连接,...”消息。当我在iOS中触发[_socket emit:@"getProjects" ...]时,服务器上没有任何反应。 “连接”或“getProjects”事件都不会被调用。

我控制了互联网,据我所知,我已经完成了所有的博客和我能找到的所有例子。

我在这个设置中缺少什么?或者我从根本上错过了什么?

回答

0

刚才意识到这是我的全部坏事。我的时机错了,因为我正在使用不同通信模型的代码进行重构。我的代码是在套接字创建之后但准备好发送数据之前设法执行发射。

现在一切正常。谢谢。

+0

但是,如何知道,该套接字已准备好发出。我面临同样的问题,但仍然困难重重! –

+0

在您收到连接事件之前,套接字已脱机。我的问题是,我在执行'connect'之后,'connect'有机会执行之前直接运行'emit'。我需要将我的'发射'转换为'on('connect'...)'方法,以便只有在连接建立后才执行我的发射。 – drekka

+0

好的,那么我认为我有一些其他问题。谢谢你的帮助!我只是在开启('连接')响应之后才呼叫发射。 –

0

我对iOS代码没有任何了解。但是我在服务器代码中看到了一些错误。

socket.on('connect', function (data) { 
     console.log('Connected, data: ' + data); 
}); 

上面的代码表示有人发送数据到套接字名称“连接”它的意思console.log数据。

我认为这是你的代码应该看起来像。

var io = SocketIO(8099, { log: true }); 

io.on('connection', function(socket) { 
    console.log('New Connection'); 
    socket.on('getProjects', function(data) { 
     database.allProjects(function getAllProjectsCallback(err, rows) { 
      console.log('Got the project list'); 
      socket.emit('projectList', rows); 
     }); 
    }); 
}); 
+0

我的理解是,'连接'在连接完成时执行,'断开'在用户断开连接时被调用。除了这两个和其他一些预定义的消息之外,我可以使用'socket.on(...)'来定义我喜欢的任何消息。我看到的问题是'connect'在iOS客户端上执行,但在服务器上没有执行任何操作。 iOS客户端发出'getProjects'消息,并且服务器上没有任何反应。没有任何错误。 – drekka