Совместное использование глобальных именованных потоков в симуляторе NodeJS - PullRequest
0 голосов
/ 08 мая 2020

Я сейчас работаю над приложением для моделирования, реализованным с помощью NodeJS. У меня есть основная симуляция l oop, которая обновляет ser ie a сущностей (JS объектов) на неопределенный срок. Мне нужно реализовать механизм, чтобы иметь возможность подключаться к симулятору с помощью веб-сокетов. Затем, основываясь на некоторых параметрах подключения, я хотел бы на каждой итерации выводить sh последнее состояние указанного c объекта в веб-сокет.

Как я вижу, решение должно состоять в запись в объект stream последнего состояния каждой сущности в каждой итерации, а затем, после установления соединения, запись в веб-сокет каждый раз, когда данные считываются из stream, назначенного этой сущности.

Однако я не могу понять, как можно было бы разделить кучу потоковых объектов между l oop и обратным вызовом соединения через веб-сокет. Можно ли создать что-то вроде "именованного" глобального stream, чтобы я мог писать в него в основном l oop и находить его в обратном вызове веб-сокета?

Совместное использование массива streams моделирование с самого начала не вариант, так как количество сущностей может меняться со временем.

Вот некоторый псевдокод моей идеальной реализации; любые подсказки и указания будут полезны!

// simulation loop
while(true){
    for(let entity in entities) {
        update(entity);
        streams[entity].write(entity.state);
    }
}

// websocket handler
websocketServer.on('message asking about entity'){
    for(let data of streams[entity]){
        reply(data)
    }
}
...