我似乎無法找出這一個。我正在測試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」事件都不會被調用。
我控制了互聯網,據我所知,我已經完成了所有的博客和我能找到的所有例子。
我在這個設置中缺少什麼?或者我從根本上錯過了什麼?
但是,如何知道,該套接字已準備好發出。我面臨同樣的問題,但仍然困難重重! –
在您收到連接事件之前,套接字已脫機。我的問題是,我在執行'connect'之後,'connect'有機會執行之前直接運行'emit'。我需要將我的'發射'轉換爲'on('connect'...)'方法,以便只有在連接建立後才執行我的發射。 – drekka
好的,那麼我認爲我有一些其他問題。謝謝你的幫助!我只是在開啓('連接')響應之後才呼叫發射。 –