Uruchomienie programu c++ poprzez Jave na gcp.

0

Nie do końca wiem co googlować, dlatego niektóre moje stwierdzenia mogą być dość zabawne.

Mam napisane dwa programy w c++. Chcę postawić prostą aplikację spring + react na gcp. Ta aplikacja przyjmuję dane i musi odpalać z tymi danymi program c++.
Jeden z nich odpala się:
./program < plikWejsciowy > plikWynikowy
Drugi:
./program2 plikWejściowy2
Odpalanie tych programów poprzez Jave pewnie nie będzie trudne (ktoś podpowie co googlowac, jeżeli nie chciałbym tych plików zapisywać tylko podawać jako Stringi w javie - oszczędzi mi trochę czasu?)
Zastanawiam się czy jest możliwość hostowania czegoś takiego na gcp? Czyli odpalanie programów napisanych w c++ na gcp jest możliwe? Czy takie skompilowane programy trzeba "opakować" w dockera? Nie do końca wiem co googlowac i jak tego typu rzeczy się nazywają.

Pozdrawiam

1

Nie do końca chce mi się wierzyć, ze programy są aż tak wybitne, aby ich nie zrobić w Javie ...

Już na localhoście bym, przewidywał problemy, jak się ma pecha ...
A w środowiskach zarządzanych na sposób clouda???

Starujesz ... i się odpala, owszem, ale na mniej obciążonym nodzie ... (taki żart-wyobrazenie)

EDIT: jest wiarygodna ścieżka, przemigrować je do pełnoprawnych webserwisów, ale to już pierwszy pomysł jest prostszy ...

1

Ja co prawda wołałem apkę exe z Javy w kliencie napisanym w JavaFX ale tutaj masz taką klasę: https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html i masz metodę exec() do wykonywania innych procesów w systemie. Jeżeli chcesz zrobić aplikację która wystawia np. REST API i woła apkę exe napisaną w np. C++ to radziłbym wywalić Springa i użyć czegoś mniej magicznego np. JavaSpark.

2
Undersent napisał(a):

Jeden z nich odpala się:
./program < plikWejsciowy > plikWynikowy
Drugi:
./program2 plikWejściowy2
Odpalanie tych programów poprzez Jave pewnie nie będzie trudne (ktoś podpowie co googlowac, jeżeli nie chciałbym tych plików zapisywać tylko podawać jako Stringi w javie - oszczędzi mi trochę czasu?)

Nie baw się w pliki, zaprojektuj aplikację tak, żeby polegała na stdin i stdout.

Undersent napisał(a):

Zastanawiam się czy jest możliwość hostowania czegoś takiego na gcp? Czyli odpalanie programów napisanych w c++ na gcp jest możliwe? Czy takie skompilowane programy trzeba "opakować" w dockera? Nie do końca wiem co googlowac i jak tego typu rzeczy się nazywają.

Najprościej będzie napisać jeden dockerfile, który będzie budował cały stack. Nie robiłbym osobnych kontenerów, bo więcej zabawy. C++ raczej nie pojedzie inaczej, niż w kontenerze. Jakbyś używał AWS, to mógłbyś używać API do C++ dla aws-lambda, niestety odpowiednik z gcp (Cloud Functions) nie wspiera C++.

0

spawn procesu dla każdego requestu ... bosch, to mamy rok 1995?

6

Biblioteka, którą się takie rzeczy nieco wygodniej niż Runtime.exec obsługuje:
http://commons.apache.org/proper/commons-exec/tutorial.html
(a może raczej elastyczniej - bo wygodnie to i tak średnio). Wygodne biblioteki do "exec" to są np, w Scali, gdzie nie ma manii pakowania wszystkiego w "AbstractFactoryMangerBean".

Zgadzam się, że zamiast wpisywać pliki / czytać pliki lepiej jest chyba przepuścic to przez stdout / stdin ( i Runtime.exec i Apache commons robi to by default).

takie rzeczy prosto na gke (google kubernetes engine) (docker), inaczej ... nie wiem.
Przy okazji, takie odpalanie programów w c++ z javy to normalka, nie ma w tym nic dziwnego nawet w roku 2020.
A spawn całego procesu to nie jest żaden dramat (w zależności oczywiście co się robi).

1

Ale nie rozumiem jaki problem. Chciałem sobie jakąś pierdołe postawić na gcp, ot tak, dla siebie, na tydzień może dwa. Jestem ciekaw czy to jest w ogóle możliwe, zadałem normalne pytanie, a niektórzy jakieś szpileczki próbują mi wbijać. Undersent 2020-10-09 22:16>

AnyKtokolwiek napisał(a):

spawn procesu dla każdego requestu ... bosch, to mamy rok 1995?
screenshot-20201010093350.png

To podaję sposób dla CENNYCH i obszernych programów C++, które nie będą (szybko) przepisane na Javę

  • zgadzam się, ze przekazanie przez strumienie in/out jest lepsze niż "trzecie" pliki pod względem logicznym. Wydajnościowo -zarządczy zostaje ten sam. Idźmy dalej: to od lat 90 się nazywa CGI, tzreba to nieco sformalizować, dostosować się 1)
  • zaledwie w latach 90tych wynaleziono FastCGI. Wynalazek tak stary, ze już nie ma w necie pierwotnych opisów koncepcji. generalnie chodziło o to, ze proces rezyduje długo, i wielokrotnie realizuje odpowiedź bez powoływania nowych procesów. A połączenie odbywa się przez binarny socket.
  • więc podejmijmy wzorzec z lat 90tych i na dziś to w tym sockecie by latał protokół HTTP, czyli proces C++ stał się webserwisem. Wszystkie atrybuty nowoczesnego clouda spełnia. Skoro i tak mamy zmieniać coś w programie C++, może warto zrobić ładnie?
  1. jakby się głęboko wczytać w dokumentację Tomcata, to nadal są opcje wywołania CGI (nic nie wiem o FastCGI). Choć nie sądzę, aby w wynajętych usługach było to aktywowane
0

no dokładnie, cgi albo fastcgi. CGI mozna pisac w bashu, pythonie, perlu albo nawet C++. Mozna w C++ zrobic taka ministrone internetowa/.serwis/whatever. Ktorego jedynym zadaniem bedzie przyjmowanie inputu przez forme html i uruchomienie docelowego programu z tymi argumentami

1 użytkowników online, w tym zalogowanych: 0, gości: 1