Задать вопрос
@nik8n

Как на node.js данные с UDP передать клиентам Server Sent Events?

Здравствуйте, есть такая схема
653f8e0da4803920562111.jpeg

Развернут 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 {
		// отправка сообщений клиентам - как отсюда передать в стрим ??
    }
})
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы