gpt4 book ai didi

javascript - iOS 设备和 Node.js 服务器之间带有 ack 的 Socket.io 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 01:22:45 26 4
gpt4 key购买 nike

我有一个项目,其中有一个 iOS Objective-C 应用程序试图与 Node.js 服务器通信。我正在使用socket.io (iOS)socket.io在 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 代码如下所示:

var SocketIO = require('socket.io');
var io = SocketIO(8099);

io.on('connection', function(socket) {
socket.on('ListProjects', function(data, getProjectsCallback) {
database.allProjects(function getAllProjectsCallback(err, rows) {
getProjectsCallback(rows);
});
});
});

当我尝试运行它时,getProjectsCallback 使服务器崩溃,因为它不是一个函数。从另一个线程上的评论中,我了解到如果对服务器的调用正确并期待确认,这将是一个函数。

有人知道我做错了什么吗?

附言她是来自 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,但不知何故它没有被传递给回调。

最佳答案

不确定这是错误还是协议(protocol)限制,但是当您将空数组传递给 emitWithAck:withItems: 时它不起作用。您会看到服务器端 data 包含您的回调函数,而不是您期望的 getProjectsCallback

所以,有两个选择:

  • 在那种情况下,认识到你的监听器处理程序的第一个参数将是回调,而不是第二个
  • 或将任何随机数据添加到项目数组(例如 @[@"x"])

我想我会选择第二个选项,以防将来有人解决这个问题。

关于javascript - iOS 设备和 Node.js 服务器之间带有 ack 的 Socket.io 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34406260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com