我有一個項目,其中有一個iOS Objective-C應用程序試圖與Node.js服務器交談。我在node.js上使用socket.io (iOS)和socket.io。Socket.io在iOS設備和Node.js服務器之間不起作用
我想解決的問題是從設備獲取消息到服務器,並讓服務器返回響應。爲此,我試圖通過發送一條消息並預期包含該設備之後的數據的確認來做到這一點。
設備代碼如下所示:
void (^serverAck)(uint64_t, void (^)(NSArray *)) = [_socket emitWithAck:@"ListProjects" withItems:@[]];
serverAck(0, ^(NSArray* data) {
if ([data count] == 0) {
NSError *error = [NSError errorWithDomain:@"CRXServer" code:1 userInfo:nil];
failureBlock(error);
} else {
successBlock(data);
}
});
而且Node.js的代碼如下所示:
當我嘗試運行此,getProjectsCallback
崩潰的服務器,因爲它是不一個函數。從另一個線程發表的意見中,我明白如果對服務器的調用是正確的並且期待一個確認,這將是一個函數。
任何人都知道我做錯了什麼?
P.S.她是從socket.o日誌轉儲顯示收到的請求:
engine:socket packet +0ms
socket.io-parser decoded 20["getProjects"] as {"type":2,"nsp":"/","id":0,"data":["getProjects"]} +14ms
socket.io:socket got packet {"type":2,"nsp":"/","id":0,"data":["getProjects"]} +15ms
socket.io:socket emitting event ["getProjects"] +0ms
socket.io:socket attaching ack callback to event +0ms
Getting all projects ...
Releasing connection
Got the project list
/Users/derekclarkson/projects/crux-Server/node_modules/mysql/lib/protocol/Parser.js:82
throw err;
^
TypeError: getProjectsCallback is not a function
at getAllProjectsCallback (/Users/derekclarkson/projects/crux-Server/Server.js:20:13)
at Query.executeCodeblockCallback [as _callback] (/Users/derekclarkson/projects/crux-Server/Database.js:321:17)
所以看起來socket.io是否附着一個ACK,但不知何故,它沒有被傳遞給回調。
Doh。當我想到這一點時,很明顯。現在它正在工作。謝謝。 – drekka