Здравствуйте, есть такая схема
Развернут node.js сервер на Express + UDP клиент и реализована технология Serevr Sent Events (SSE) таким образом, что при приходе сообщений со стороннего UDP-сервера они рассылаются клиентам по SSE
Но сейчас стала задача при приходе определенного сообщения ( назовем его data.important) его надо дополнительно записывать в Базу Данных.
Мой код выглядит примерно так и здесь я вставляю UDP-слушатель события в обработчик маршрута '/stream' чтобы сразу его передать клиентам. Но если я добавлю здесь функцию записи в БД, то она будет выполняться столько раз сколько на сервере SSE клиентов
const dgram = require ('dgram')
const socket = dgram.createSocket ('udp4')
const express = require('express')
const app = express()
...
app.get ('/stream',(request, response) => {
const headers = {
'Content-Type':'text/event-stream',
'Connection':'keep-alive',
'Cache-Control':'no-cache',
'Access-Control-Allow-Origin':'*',
}
res.writeHead (200, headers)
// при событии 'message' на UDP-сокете, данные (data) отправляются клиентам SSE
socket.on ('message', (data, rinfo)=> {
response.write (`data: ${data}\n\n`)
})
})
я думаю что мне надо реализовать что-то подобное, отдельно фильтровать UDP соообщения и если там data.important, то сперва отправлять их на запись в БД, а дальше отправлять клиентам. Но как отправить клиентам в стрим я не могу решить?
socket.on ('message', (data,rinfo) => {
if (data.important) {
// запись в базу данных
// отправка сообщения клиентам как прошла запись в БД - если ошибка, то передать ошибку - в стрим (как??)
// отправка сообщения клиентам - как отсюда передать в стрим ??
} else {
// отправка сообщений клиентам - как отсюда передать в стрим ??
}
})