使用 ack SocketIO 与 iOS 发出
Posted
技术标签:
【中文标题】使用 ack SocketIO 与 iOS 发出【英文标题】:Emit with ack SocketIO with iOS 【发布时间】:2018-11-20 10:44:16 【问题描述】:我正在尝试使用回调进行发射,但似乎服务器无法将回调函数识别为函数。我查阅了文档,据我所知,代码应该可以工作。
这是我得到的错误:TypeError: callBack is not a function
这是客户端代码:
socket?.emitWithAck("connectUsername", username).timingOut(after: 2, callback: (data) in
print(data)
)
和服务器代码:
socket.on("connectUsername", function(username, callBack)
//Do stuff with username here...
var id = socket.id
callBack(id);
);
感谢任何帮助。
【问题讨论】:
【参考方案1】:@kiddosrails 提到的问题是超时 2 秒是执行时间更少,您可以设置超时 0 表示不超时。希望这个答案对您有所帮助。
socket.emitWithAck("connectUsername", username).timingOut(after: 0) data in
print(data)
【讨论】:
服务器控制台依然报同样的错误:TypeError: callBack is not a function 可以分享socket.io的控制台日志吗?【参考方案2】:我在文档中没有将回调视为timingOut
的参数。以下应该工作:
socket.emitWithAck("connectUsername", username).timingOut(after: 20) data in
print(data)
如果上述方法不起作用,请通过将其更改为以下内容来检查 究竟 是什么回调:
socket.on("connectUsername", function(username, callBack)
//Do stuff with username here...
var id = socket.id
console.log(callBack.toString());
);
【讨论】:
我一到家就测试一下 如果我在客户端删除callBack参数,编译器会报错并建议重新添加。如果我尝试检查“callBack”的字符串,控制台中会发生以下情况:/Users/xxxx/Documents/socket-training/index.js:69 console.log(callBack.toString()); ^ 类型错误:无法读取未定义的属性“toString”【参考方案3】:iOS 代码
socket?.emitWithAck("connectUsername", data).timingOut(after: 0) data in
print(data)
服务器代码
var io = socketIO.listen(server);
io.sockets.on('connection', function(client)
console.log('a user connected..!!!!!');
client.on('connectUsername', function(username, callBack)
var id = socket.id
callback(
ID:id,
Message: "Successfully."
);
【讨论】:
服务器控制台依然报同样的错误:TypeError: callBack is not a function 请检查更新的答案,如果您仍然遇到任何问题,请告诉我 这正是我的代码写出的方式,我可以成功连接用户并执行其他操作,但是一旦我尝试使用回调进行发射,它就会崩溃。 请问您在服务器端和ios端使用的是哪个socket.io版本 服务器:socket.io@2.1.1 - 客户端:'Socket.IO-Client-Swift','~> 13.2.0'【参考方案4】:在您的服务器代码中:
socket.on("connectUsername", function(username, callBack)
//Do stuff with username here...
var id = socket.id
callBack = (id);
);
这是因为回调没有像对象一样定义,所以你可以像对象一样定义它。
【讨论】:
请说明您的方法的原因,以便其他人可以轻松理解以上是关于使用 ack SocketIO 与 iOS 发出的主要内容,如果未能解决你的问题,请参考以下文章
向特定用户发出的 SocketIO(不为每个客户端使用单独的房间)