В следующем фрагменте client
является клиентом обмена сообщениями в пабе / под-сообщении.
comm.js
(обфусцировано по понятным причинам ....)
const communicator = class extends EventEmitter {
constructor(options) {
super();
// Some configuration
// Then, instantiate
this.commClient = ...
}
//
sendMessage(message) {
// Send message over TCP socket
}
//
messageReceived() {
// Receive message
this.commClient.on('message', (data) => {
this.emit('msg', data)
})
}
}
const comm = require('./comm.js')
let client = new comm.communicator()
const server = serverApp.listen(process.env.SERVER_PORT, () => {
console.log('Server up.')
})
serverApp.get('/book/:bookId', (req, res) => {
client.sendMessage(JSON.stringify({
action: 'get',
message: req.params.bookId
}))
client.on('msg', (data) => {
res.status(200).send(data)
})
})
Рассмотрим следующую последовательность.
GET
запрос получен. client.sendMessage
выполнено. client.on
нет получено. - Второй
GET
запрос получен. client.sendMessage
выполнено. client.on
получено.
Как узнать, для какого вызова (первый или второй) был получен client.on
? Даже если я следил за этим (скажем, за Redis), откуда мне знать, что я делаю res.status(200).send
для первого или второго вызова?