Staram się owijać głowę strumieniami Node.js, nie jestem całkiem nowym użytkownikiem JavaScript i węzła, ostatnie języki, które naprawdę mam, to Perl i PHP: - DOrurowanie/przesyłanie strumieniowe obiektów JavaScript w Node.js
Przeczytałem dokumentację bufora/strumieni @ nodejs.org, obejrzałem James Halliday @LXJS, przeczytałem jego podręcznik do streamowania i Thorsten Lorenz event-stream post. Zaczynam rozumieć podstawy :)
Przetwarzam dane, które są serializowane w RDF (który nie jest ani JSON ani XML). Udaje mi się pobrać dane (w prawdziwym kodzie na żądanie) i przeanalizować je w obiekcie JS przy użyciu modułu rdfstore
.
tej pory mam to zrobić:
s.createReadStream('myRDFdata.ttl').pipe(serialize()).pipe(process.stdout);
Gdzie serialize()
wykonuje pracę parsowanie szeregowania kod w tym samym czasie w tej chwili. Używam modułu through
do połączenia ze strumieniem.
Teraz mam jeszcze kilka metod (nie deklarację funkcji prawdziwe, ale mam nadzieję, że masz punkt):
getRecipe(parsedRDF)
-> zabiera przeanalizowany RDF (jako obiekt JavaScript) i mówi mi, jak używać tocreateMeal(parsedRDF, recipe)
-> zabiera przeanalizowany RDF i recepturę z góry i tworzy nowy obiekt RDF z niego- to nowy obiekt musi dostać szeregowane i przesyłane do przeglądarki
- (w realnym świecie
getRecipe
Wil muszę wykonać interakcję użytkownika w przeglądarce)
Podoba mi się pomysł łączenia tego za pomocą rur dla większej elastyczności, gdy poprawię kod później. Ale nie chcę serializować go do serializacji RDF za każdym razem, ale po prostu wysłać wokół obiektu JS. Z tego, co przeczytałem w dokumentacji, mógłbym skorzystać z modułu stringify
, aby uzyskać ciąg z każdego kroku, aby przeprowadzić go do następnego kroku. Ale:
- czy to ma sens? Czy mogę dodać niepotrzebne obciążenie lub czy jest to pomijalne?
- Nie widzę sposobu, w jaki mógłbym dać sparsowanyRDF dla obu metod z zależnością, że
getRecipe
musiałaby być wywołana jako pierwsza, a dane wyjściowe również dlacreateMeal
. Czy są moduły, które mi w tym pomagają? - Możliwe, że muszę poprosić użytkownika o ostateczny wybór receptury, więc może potrzebować wysłać rzeczy do przeglądarki, aby uzyskać ostateczną odpowiedź. Czy mogę zrobić coś takiego przez gniazda, podczas gdy rura "czeka"?
Mam nadzieję, że to pokazuje, co próbuję zrobić, jeśli nie, postaram się podać więcej szczegółów/powtórzyć.
Aktualizacja: Po spanie nad nim zorientowali się jeszcze kilka rzeczy:
- To chyba nie ma sensu do serializacji formatu RDF do czegoś podobnego niestandardowym jeśli istnieją oficjalne formaty serializacji.Więc zamiast używać
stringify
po prostu przekażę oficjalną serializację RDF pomiędzy krokami - Oznacza to, że parsuję/serializuje obiekty w każdym kroku i to z pewnością dodaje narzut. Pytanie czy mnie to obchodzi? Mogłem przedłużyć moduł RDF używać do analizowania ze strumienia i szeregować pod jednym
- mogę rozwiązać problem z zależnością między
getRecipe
icreateMeal
poprzez dodanie pewnych informacji odgetRecipe
doparseRDF
, można to zrobić bardzo łatwo z RDF bez zerwanie oryginalnego modelu danych. Ale chciałbym jeszcze się dowiedzieć, czy mogę obsłużyć zależności jak to z rur
Dzięki za odpowiedź, rzeczywiście dodam obsługę rur do biblioteki RDF i udostępnię ją również jako moduł! –