Crate ia [−] [src]
The runtime for writing applications for Ice, an efficient, reliable and asynchronous platform for building modern backend applications in WebAssembly.
At a high level, ia
(which stands for "Ice App") provides a few major components (based on
the underlying Ice Core engine):
- Asynchronous TCP server and client
- File I/O
- Timer (not working for now due to an Ice bug)
The asynchronous APIs are based on futures
, while low-level callback-based APIs
are also provided.
Examples
A simple TCP proxy that forwards 127.0.0.1:1111
to 127.0.0.1:80
:
#![feature(proc_macro, generators)] #[macro_use] extern crate ia; extern crate futures_await as futures; use futures::prelude::*; use ia::net::{TcpListener, TcpConnection}; use ia::error::IoResult; #[async] fn handle_connection(incoming: TcpConnection) -> IoResult<()> { #[async] fn forward(from: TcpConnection, to: TcpConnection) -> IoResult<()> { while let Ok(v) = await!(from.read(4096)) { if v.len() == 0 { break; } await!(to.write(v))?; } Ok(()) } let proxied = await!(TcpConnection::connect("127.0.0.1:80"))?; ia::spawn(forward(proxied.clone(), incoming.clone())); await!(forward(incoming, proxied))?; Ok(()) } #[async] fn run_proxy() -> IoResult<()> { static LISTEN_ADDR: &'static str = "127.0.0.1:1111"; let listener = TcpListener::new(LISTEN_ADDR); println!("Listening on {}", LISTEN_ADDR); #[async] for incoming in listener { ia::spawn(handle_connection(incoming)); } Ok(()) } app_init!({ ia::spawn(run_proxy()); 0 });
See simpleproxy for the full code & project layout.
Re-exports
pub extern crate futures; |
pub use executor::spawn; |
Modules
error | |
executor | |
fs | |
net | |
raw | |
utils |
Macros
app_init | |
eprintln | |
println |