这是场景,
我有2个节点,我们称它们为节点A和节点B。我希望节点A等待继续执行其余代码,直到它收到节点B的响应为止(而不是等待它收到的来自节点B的确认)来自节点A的消息,但我需要节点A等待,直到它从节点B接收到数据为止)。我认为我必须使用promise和async,但是似乎无法将其付诸实践。有什么建议吗?
NodeA.js
var io = require('socket.io')(http);
io.on('connection', function(socket){
io.emit('triggerEvent', (response_from_B) => {
console.log(response_from_B)
});
});
NodeB.js
var socket = io_client.connect('url_A', {reconnect: true});
var data_from_B = 'some_date';
socket.on('connect', function() {
socket.on('triggerEvent', (fn) => {
// Some process with data_from_B
fn(data_from_B);
});
});
请记住,我仍然熟悉socket.io。节点A和节点B是两个不同的应用程序,它们使用socket.io相互通信。当用户访问节点A(应用程序A)时,该数据立即由socket.io与节点B(应用程序B)共享。在这种情况下,节点A充当服务器,而节点B充当客户端。反之亦然。我共享的摘录是当用户访问节点A时,它将像服务器一样,将数据发送到节点B时,它将像客户端一样。当节点A触发emit
并从节点B接收数据时,我需要一些帮助,我假设使用回调。当我尝试上面的代码时,出现错误消息:
Callbacks are not supported when broadcasting
有关如何执行此操作的任何提示?还是有关于如何以不同方式处理此问题的建议?
答案 0 :(得分:1)
nodeA.js
import io from "socket.io-client";
this.socket = io("urlNodeB:3000");
let data = { something: 'something' }
this.socket.emit('triggerEvent', data, (responseFromB) => {
// continue with response from B
console.log(responseFromB)
});
nodeB.js
const app = require('express')();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
io.on("connection", socket => {
socket.on('triggerEvent', (data, callback) => {
// process data from node A
let dataProcessing = data
callback(dataProcessing);
});
}
server.listen(3000, () => console.log('server up'));