2015-10-14 90 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