【发布时间】:2015-04-07 16:21:44
【问题描述】:
我有一个三路 socket.io 项目,它使用 relay 服务器到 emit 命令到 hub controller 其中 on relay 发射将 emit 到所有节点。
我的问题是如何使用
emit's回调收集所有连接节点的所有响应?
该回调将触发多次,每个连接的节点一次。有没有办法收集每个响应并将它们发送到初始发出回调。
这里是每个步骤的代码。
// RELAY MESSAGING CLIENT (SENDS MESSAGES TO ADMIN)
io.emit("pricing-relay", {
sku: "AMZ-PROD"
}, function(errString, responsesFromAllNodes){
// response from `socket.on("pricing-relay"`)
// console.log(responsesFromAllNodes)
/*
[
"invalid something", null,
null, true,
null, false,
"invalid something", null,
null, true,
]
*/
})
// HUB CONTROLLER SERVER (DISTRIBUTES TO ALL CONNECTED NODES)
socket.on("pricing-relay", function(data, callback){
var responses = []
io.emit("pricing", data, function(errString, response){
response.push([errString, response])
// when these are all done responding
// send callback(null, responses)
})
})
// DRONE CLIENT (PIECE EXECUTING ASYNC CODE)
io.on("pricing", function(data, callback){
return changepricing(data, function(err, result){
if(err) return callback(err.message, result)
return callback(null, result)
})
})
【问题讨论】:
-
原来是
Callbacks are not supported when broadcasting。
标签: javascript events asynchronous callback socket.io