Hello world working with Actix
This commit is contained in:
parent
141ed69449
commit
2c94fe0cab
10 changed files with 1222 additions and 346 deletions
1
project/.gitignore
vendored
Normal file
1
project/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
target/
|
1478
project/Cargo.lock
generated
1478
project/Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -7,4 +7,6 @@ edition = "2018"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
yew = "0.11.0"
|
||||
actix-web = "2.0.0"
|
||||
actix-rt = "1.0.0"
|
||||
serde = "1.0.104"
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
use yew::{html, Callback, ClickEvent, Component, ComponentLink, Html, ShouldRender};
|
||||
|
||||
pub struct App {
|
||||
clicked: bool,
|
||||
on_click: Callback<ClickEvent>,
|
||||
}
|
||||
|
||||
pub enum Msg {
|
||||
Click,
|
||||
}
|
||||
|
||||
impl Component for App {
|
||||
type Message = Msg;
|
||||
type Properties = ();
|
||||
|
||||
fn create(_: Self::Properties, link: ComponentLink<Self>) -> Self {
|
||||
App {
|
||||
clicked: false,
|
||||
on_click: link.callback(|_| Msg::Click),
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn update(&mut self, msg: Self::Message) -> ShouldRender {
|
||||
match msg {
|
||||
Msg::Click => {
|
||||
self.clicked = true;
|
||||
true // Indicate that the component should re-render
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn view(&self) -> Html {
|
||||
let button_text = if self.clicked { "Clicked!" } else { "Click me!" };
|
||||
|
||||
html! {
|
||||
<button onclick=&self.on_click>{ button_text }</button>
|
||||
}
|
||||
}
|
||||
}
|
8
project/src/controllers.rs
Normal file
8
project/src/controllers.rs
Normal file
|
@ -0,0 +1,8 @@
|
|||
#[macro_use]
|
||||
use actix_web::{get, post, HttpResponse};
|
||||
|
||||
#[get("/")]
|
||||
pub async fn hello_world() -> HttpResponse {
|
||||
let message = "Hello World!";
|
||||
HttpResponse::Ok().json(message)
|
||||
}
|
|
@ -1,5 +1,12 @@
|
|||
mod app;
|
||||
mod controllers;
|
||||
|
||||
fn main() {
|
||||
yew::start_app::<app::App>();
|
||||
use crate::controllers::*;
|
||||
use actix_web::{web, App, HttpServer};
|
||||
|
||||
#[actix_rt::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
HttpServer::new(move || App::new().service(hello_world))
|
||||
.bind("127.0.0.1:8080")?
|
||||
.run()
|
||||
.await
|
||||
}
|
||||
|
|
|
@ -7,4 +7,8 @@ Tämän takia myös web-ohjelmoinnissa käytettävissä teknologioissa on tapaht
|
|||
|
||||
Vaikka JavaScript onkin suosittu, siinä on paljon ongelmia\cite{medium:javascript}. Suurimmat ongelmat liittyvät kielen heikkoon tyypitykseen, mikä saattaa aiheuttaa ongelmia jotka ilmenevät vasta ajon aikana ja vain tietyissä rajatapauksissa. Tämän takia koodin testaamiseen ja laadun ylläpitämiseen pitää panostaa enemmän. Toinen iso ongelma on se, että JavaScript ei ole tarkka koodin tyylistä. Tämä hankaloittaa projekteissa kommunikointia ja työtoverien koodin lukemista.
|
||||
|
||||
Koska JavaScript on tulkittava kieli, se tulee aina häviämään suorituskyvyssä koottaville kielille. Tätä eroa on osittain kavennettu ajonaikaisen kääntämisen optimoinneilla.
|
||||
|
||||
Edellä mainittujen syiden takia lähivuosina on ilmaantunut useita vaihtoehtoja sekä palvelin- että asiakaspuolen ohjelmointikieliksi. Näistä yksi itseäni eniten kiinnostava on Rust. Tämän opinnäytetyön yhteydessä toteutettu projekti käyttää Rustia sekä palvelimella että asiakaspuolella.
|
||||
|
||||
\clearpage
|
||||
|
|
11
tex/chapters/2languages.tex
Normal file
11
tex/chapters/2languages.tex
Normal file
|
@ -0,0 +1,11 @@
|
|||
\chapter{Kielet}
|
||||
|
||||
\section{Rust}
|
||||
Rust on Mozillan 2010 julkaisema ohjelmointikieli. Se on hyvin suorituskykyinen järjestelmätason ohjelmointikieli, muistuttaen monilta osin C ja C++ kieliä. Rustin tarkoituksena on säilyttää näiden vanhojen kielien suorituskyky, mutta kuitenkin tarjoten samalla muun muassa vahvan tyypityksen, ratkaista C-kielille tyypilliset muistinhallintaongelmat ja taatun turvallisen rinnakkaisajon.
|
||||
|
||||
\section{WebAssembly}
|
||||
WebAssembly on kehitteillä oleva asiakaspuolen ohjelmointikieli. Sitä on suunniteltu JavaScriptin seuraajaksi ja sen suurinpana etuna JavaScriptiin verrattuna on huomattavasti matalemman tason esitysmuoto, minkä ansiosta se on suorituskykyisempi.
|
||||
|
||||
Kehittäjän ei ole tarkoitus kirjoittaa WebAssemblya suoraan, vaan monien olemassa olevien ohjelmointikielien kääntäjät, esimerkiksi C++ ja Rust tukevat koodin kokoamista WebAssemblyksi.
|
||||
|
||||
\clearpage
|
|
@ -1,7 +0,0 @@
|
|||
\chapter{Rust}
|
||||
|
||||
Rust on Mozillan 2010 julkaisema ohjelmointikieli. Se on hyvin suorituskykyinen järjestelmätason ohjelmointikieli, muistuttaen monilta osin C ja C++ kieliä. Rustin tarkoituksena on säilyttää näiden vanhojen kielien suorituskyky, mutta kuitenkin tarjoten samalla muun muassa vahvan tyypityksen, ratkaista C-kielille tyypilliset muistinhallintaongelmat ja taatun turvallisen rinnakkaisajon.
|
||||
|
||||
Lisäksi Rust-koodia voi koota WebAssemblyksi, mikä on omalta osaltaan kerännyt hyvin paljon kiinnostusta lähivuosina. Sitä on suunniteltu JavaScriptin seuraajaksi. Sen etuna huomattavasti parempi suorituskyky, koska se on etukäteen konekieleksi koottu kieli, eikä tulkittu niinkuin JavaScript on.
|
||||
|
||||
\clearpage
|
|
@ -123,7 +123,7 @@
|
|||
% Thesis content if you strictly follow the "Final Year Project guide". Of course, you
|
||||
% can adapt to your specific needs (add more chapter, rename them, etc.).
|
||||
\input{chapters/1introduction.tex}
|
||||
\input{chapters/2rust.tex}
|
||||
\input{chapters/2languages.tex}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% BIBLIOGRAPHY REFERENCES
|
||||
|
|
Loading…
Reference in a new issue