Premiär! Fyndchans i SweClockers Månadens Drop

Hur ska man kunna ha automatiskt uppdatering på en hemsida? - Java

Permalänk

Hur ska man kunna ha automatiskt uppdatering på en hemsida? - Java

Vi säger att jag har byggt en hemsida som loggar temperatur. Ett dumt sätt är att låta hemsidan kontakta temperaturmätningen och efter mätningen är klar så uppdateras hemsidan. När jag menar uppdaterar så menar jag inte att hela webbläsaren uppdateras. Endast textfälten.

Orsaken varför det är ett dåligt sätt att programmera så är för att temperaturmätningen är en fysikalisk modul och om det är fler än två stycken på denna hemsida som anropar den fysikaliska mätaren så finns risken att ingen utav dessa hemsidor får fram sitt värde då två användare försöker använda en fysikalisk enhet samtidigt.

Har ni något förslag på hur man kan göra så att det program körs i bakgrunden hos servern som uppdaterar hemsidans temperaturmätning hela tiden, utan att hemsidan ska göra det. Med andra ord. Jag vill att temperaturmätaren ska skicka värden till skärmen, inte tvärt om.

Ett förslag från mig är att ha ett program som hela tiden skriver till ett plats i ramminnet. Sedan är det hemsidan som går till detta minne och läser utav det för varje sekund eller liknande. Skulle detta fungera med Java? Har ni andra förslag?

Skulle det istället gå med att ha två program. Ena programmet skriver ett värde till en fil och sparar, skriver, sparar, skriver och sparar osv. Sedan en webbapplikation som läser filen hela tiden?

Jag använder mig utav Java Server Faces för att göra mina badass hemsidor

Permalänk
Medlem

Du är själv inne på rätt spår, något som pollar temp-enheten och sparar värdet. Låt sedan sidan läsa det sparade värdet. Hur du sparar beror på om du vill ha historik eller inte.

Permalänk
Skrivet av Xcorp:

Du är själv inne på rätt spår, något som pollar temp-enheten och sparar värdet. Låt sedan sidan läsa det sparade värdet. Hur du sparar beror på om du vill ha historik eller inte.

Var det så enkelt? Två program? Webbapplikation och en "bakgrunds-MS-DOS"-program som körs som ingen ser?
Man kanske kan ha en lyssnare också för att känna av om filen har blivit ändrad? Java.nio ska enligt rykte ha en sådan häftig funktion.

Men hur blir det då om jag kör en Raspberry Pi och jag sparar en fil, skriver, sparar, skriver, sparar samma fil hela tiden med liknande värde hela tiden? Kommer inte SD-kortet gå sönder då efter ett år?

EDIT:
Hittade svaret! Socketprogrammering med Java! Ska tydligen vara enkelt för två program att kunna tala med varandra.

Permalänk
Medlem

Jag tycker att du var inne på rätt spår med ditt första förslag, inte så mycket ditt andra...

Edit:

I pseudokod:

Global variabel Temp Tråd 1: Loopa förevigt: Temp = läs temperatur från sensor Tråd 2: För varje HTTP request: Visa sida med temperatur Temp

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Skrivet av Bryal:

Jag tycker att du var inne på rätt spår med ditt första förslag, inte så mycket ditt andra...

Edit:

I pseudokod:

Global variabel Temp Tråd 1: Loopa förevigt: Temp = läs temperatur från sensor Tråd 2: För varje HTTP request: Visa sida med temperatur Temp

Jo. Men i detta fall är det två olika program. En webbapplikation ska ju inte styra läsningen utav en temperaturgivare. Ett annat program ska hela tiden köra i bakgrunden som skriver till webapplikationen som körs.

Socketprogrammering? Det verkar vara robust och säkert.

Permalänk
Medlem

Du är som de ovan säger på rätt spår. du behöver en server-klient arkitektur som det så fint kallas.

då frågar din front-end din back-end om temperatur. sedan är det back-endens jobb att hämta den temperaturen från sensorerna med lagom intervall, och lagra det för alla klienter som vill veta det.
Förmodligen kommer du behöva någon typ av databas. enklast är en relationsdatabas för denna data å du vet precis vad det är du ska lagra och hämta.

(slänger in lite ord, men som är rätt enkla att googla på)

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Skrivet av Haptic:

Du är som de ovan säger på rätt spår. du behöver en server-klient arkitektur som det så fint kallas.

då frågar din front-end din back-end om temperatur. sedan är det back-endens jobb att hämta den temperaturen från sensorerna med lagom intervall, och lagra det för alla klienter som vill veta det.
Förmodligen kommer du behöva någon typ av databas. enklast är en relationsdatabas för denna data å du vet precis vad det är du ska lagra och hämta.

(slänger in lite ord, men som är rätt enkla att googla på)

Tack! Jag har hittat en bra film som visar enkelt hur två java program kan tala med varandra.
Då var ETT problem avklarat.

Ingen som vet ett bra sätt för att kommunicera med GNU octave via Java? Jag vill alltså använda mig utav GNU octave's funktioner. Normalt kan man endast ropa från Octave -> Java, inte tvärt om.

Jag har många beräkningar i Octave. Glöm Julia...segt.

Edit:
Tror ni Sockets är rätt i detta fall, trots det är Octave också?
http://wiki.octave.org/Sockets_package

Permalänk
Medlem
Skrivet av heretic16:

Tack! Jag har hittat en bra film som visar enkelt hur två java program kan tala med varandra.
Då var ETT problem avklarat.

Ingen som vet ett bra sätt för att kommunicera med GNU octave via Java? Jag vill alltså använda mig utav GNU octave's funktioner. Normalt kan man endast ropa från Octave -> Java, inte tvärt om.

Jag har många beräkningar i Octave. Glöm Julia...segt.

Edit:
Tror ni Sockets är rätt i detta fall, trots det är Octave också?
http://wiki.octave.org/Sockets_package

Varför vill du köra ett annat programmeringsspråk (GNU Octave) för att läsa ut temperaturvärdena?

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Teknocide:

Varför vill du köra ett annat programmeringsspråk (GNU Octave) för att läsa ut temperaturvärdena?

Nej. Det ska jag göra med Java.

www.pi4j.com är lösningen på hemsidor inom inbyggda system.

Permalänk
Datavetare

Finns en teknik som är mer eller mindre en perfekt match till vad du nämner i första posten, MQTT. Fungerar med i praktiken med alla populära språk, definitivt med Java.

Nu verkar det som du försöker lösa allt med Java, men just detta vore långt enklare att lösa med JavaScript/MQTT i webbläsaren samt i princip vad som helst (inklusive Java) som kör mätningarna asynkront.

Exakt vad vill du beräkna med Octave? Möjligen kan man koppla upp Octave via MQTT (verkar fungera med Matlab i alla fall). Men en modell jag vet fungerar är Python+Paho-MQTT+NumPy.

NumPy bygger i botten på exakt samma bibliotek som Octave använder, d.v.s. sådana som implementerar BLAS & LAPACK. Så prestandamässigt är det hugget som stucket om man kör NumPy eller Octave, i botten där alla tunga lyft händer ligger ändå samma C/C++-kod

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Finns en teknik som är mer eller mindre en perfekt match till vad du nämner i första posten, MQTT. Fungerar med i praktiken med alla populära språk, definitivt med Java.

Nu verkar det som du försöker lösa allt med Java, men just detta vore långt enklare att lösa med JavaScript/MQTT i webbläsaren samt i princip vad som helst (inklusive Java) som kör mätningarna asynkront.

Exakt vad vill du beräkna med Octave? Möjligen kan man koppla upp Octave via MQTT (verkar fungera med Matlab i alla fall). Men en modell jag vet fungerar är Python+Paho-MQTT+NumPy.

NumPy bygger i botten på exakt samma bibliotek som Octave använder, d.v.s. sådana som implementerar BLAS & LAPACK. Så prestandamässigt är det hugget som stucket om man kör NumPy eller Octave, i botten där alla tunga lyft händer ligger ändå samma C/C++-kod

Jag är en man som anser att det är bättre att kunna ett programmeringsspråk bäst än 4 halvdåliga. Blivit slagen på fingrarna många gånger, men det betyder inte att dem har rätt. Bara att dem är envisa och tjuriga C-programmerare från forntiden.

Jag kör det mesta i Java. Men nu har jag inser att jag är behov utav matrisberäkningar. Då är GNU Octave bästa alternativen. Problemet är att jag måste kommunicera med Java och GNU Octave via Socket. Det fungerar, men jag har inte löst det än.

Jag undviker helst Python och Julia samt Ruby. Python är fint, men man skriver rätt mycket kod. Julia är finare, men brutalt segare. Ruby är till för hemsidor, men det är ett döende språk.

Så jag är konservativ utav mig och kör på MATLAB strukturen. I detta fall GNU Octave då jag är gammal och tråkig men kör på det som är säkert och beprövat.

Jag har hittat en blogg som visar ett bra exempel: https://pauldreik.blogspot.com/2009/04/octave-sockets-example...

När jag kör denna kod:

client = socket(AF_INET, SOCK_STREAM, 0); server_info = struct("addr", "127.0.0.1", "port", 9897); rc = connect(client, server_info); [msg_s, len_s] = recv(client,1000); disp(len_s) char(msg_s)

Då fungera mitt Java program. Först så startar jag mitt Java program, dvs SockletServer. Sedan ansluter jag min klient som är från GNU Octave. Då händer det EN sak. Att programmet går vidare. Först när jag öppnar mitt Java program så väntar den på en signal från klienten - GNU Octave. När klienten är aktiverad så "roterar" Java programmet och väntar på en ny signal.

Problemet är att jag skickar data från Java programmet till GNU Octave, men jag ser inget i GNU Octave, trots att jag läser via funktionen recv. Vad tror du är problemet varför GNU Octave inte läser. men Java programmet känner ändå utav att "nu är "klienten ansluten?" recv är en funktion som ska läsa inkommande data som jag skickar från Java programmet.

Permalänk
99:e percentilen
Skrivet av heretic16:

Jag kör det mesta i Java.

Jag undviker helst Python och Julia samt Ruby. Python är fint, men man skriver rätt mycket kod.

Tycker du att Python är mer verbost än Java?

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Skrivet av Alling:

Tycker du att Python är mer verbost än Java?

Jag måste nog tyvvär ta tillbaka det jag sade om Python. Jag tänker använda Python med Java. Då får jag använda mig utav socketprogrammering med Java och Python.

Vet inte vad verbost är, men Java är snabbare än Python då Python är ett skriptspråk. Dessutom är GUI för Java snyggare än Python. Java är till för applikationer och Python är till för skript.

Permalänk
Medlem
Skrivet av heretic16:

Vet inte vad verbost är, men Java är snabbare än Python då Python är ett skriptspråk. Dessutom är GUI för Java snyggare än Python. Java är till för applikationer och Python är till för skript.

Verbositet syftar ungefär på hur många rader kod som krävs för att uttrycka en idé i ett programmeringsspråk. Java är ökänt för att vara verbost, medan Python tvärtom är känt för att ofta vara kortfattat och simpelt. Ditt tidigare uttalande om att "Python är fint, men man skriver rätt mycket kod." lät därför väldigt underligt.

Skrivet av heretic16:

Jag måste nog tyvvär ta tillbaka det jag sade om Python. Jag tänker använda Python med Java. Då får jag använda mig utav socketprogrammering med Java och Python.

Om du nu ändå ska skriva om dina beräkningar, varför skriver du inte bara om dem i Java och kör på ett enda multitrådat monolitiskt backend, istället för att köra på en microservices-modell som kommunicerar med sockets? Visst kan det finnas fördelar med att köra på microservices, men det låter som en överdrivet komplicerad lösning för ditt problem. Jag tror att din applikation hade blivit väldigt mycket simplare och mer lätt-debuggad om du bara skrev ditt program i stil med mitt förslag tidigare i tråden.

Global variabel Temp Tråd 1: Loopa förevigt: Temp = läs temperatur från sensor Tråd 2: För varje HTTP request: Visa sida med temperatur Temp

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Medlem

Måste helt hålla med skribenten över, varför göra det krångligare än vad det är?

Visa signatur

"Happiness is only real when shared"