summaryrefslogtreecommitdiff
path: root/core/examples
diff options
context:
space:
mode:
Diffstat (limited to 'core/examples')
-rw-r--r--core/examples/http_bench.js13
-rw-r--r--core/examples/http_bench.rs37
2 files changed, 30 insertions, 20 deletions
diff --git a/core/examples/http_bench.js b/core/examples/http_bench.js
index eba9bb677..ac97e0d88 100644
--- a/core/examples/http_bench.js
+++ b/core/examples/http_bench.js
@@ -80,12 +80,14 @@ function handleAsyncMsgFromRust(buf) {
/** Listens on 0.0.0.0:4500, returns rid. */
function listen() {
- return sendSync(ops["listen"], -1);
+ const { rid } = Deno.core.jsonOpSync("listen", {});
+ return rid;
}
/** Accepts a connection, returns rid. */
-function accept(rid) {
- return sendAsync(ops["accept"], rid);
+async function accept(serverRid) {
+ const { rid } = await Deno.core.jsonOpAsync("accept", { rid: serverRid });
+ return rid;
}
/**
@@ -124,9 +126,8 @@ let ops;
async function main() {
ops = Deno.core.ops();
- for (const opName in ops) {
- Deno.core.setAsyncHandler(ops[opName], handleAsyncMsgFromRust);
- }
+ Deno.core.setAsyncHandler(ops["read"], handleAsyncMsgFromRust);
+ Deno.core.setAsyncHandler(ops["write"], handleAsyncMsgFromRust);
Deno.core.print("http_bench.js start\n");
diff --git a/core/examples/http_bench.rs b/core/examples/http_bench.rs
index 3a11a3507..0dbb6f8e6 100644
--- a/core/examples/http_bench.rs
+++ b/core/examples/http_bench.rs
@@ -1,14 +1,17 @@
#[macro_use]
extern crate log;
+use deno_core::serde_json;
use deno_core::CoreIsolate;
use deno_core::CoreIsolateState;
+use deno_core::ErrBox;
use deno_core::Op;
use deno_core::ResourceTable;
use deno_core::Script;
use deno_core::StartupData;
use deno_core::ZeroCopyBuf;
use futures::future::poll_fn;
+use futures::future::Future;
use futures::future::FutureExt;
use futures::future::TryFuture;
use futures::future::TryFutureExt;
@@ -152,8 +155,8 @@ pub fn isolate_new() -> CoreIsolate {
isolate.register_op(name, core_handler);
}
- register_sync_op(&mut isolate, "listen", op_listen);
- register_async_op(&mut isolate, "accept", op_accept);
+ isolate.register_op_json_sync("listen", op_listen);
+ isolate.register_op_json_async("accept", op_accept);
register_async_op(&mut isolate, "read", op_read);
register_async_op(&mut isolate, "write", op_write);
register_sync_op(&mut isolate, "close", op_close);
@@ -175,34 +178,40 @@ fn op_close(
}
fn op_listen(
- resource_table: Rc<RefCell<ResourceTable>>,
- _rid: u32,
+ state: &mut CoreIsolateState,
+ _args: serde_json::Value,
_buf: &mut [ZeroCopyBuf],
-) -> Result<u32, Error> {
+) -> Result<serde_json::Value, ErrBox> {
debug!("listen");
let addr = "127.0.0.1:4544".parse::<SocketAddr>().unwrap();
let std_listener = std::net::TcpListener::bind(&addr)?;
let listener = TcpListener::from_std(std_listener)?;
- let resource_table = &mut resource_table.borrow_mut();
+ let resource_table = &mut state.resource_table.borrow_mut();
let rid = resource_table.add("tcpListener", Box::new(listener));
- Ok(rid)
+ Ok(serde_json::json!({ "rid": rid }))
}
fn op_accept(
- resource_table: Rc<RefCell<ResourceTable>>,
- rid: u32,
+ state: &mut CoreIsolateState,
+ args: serde_json::Value,
_buf: &mut [ZeroCopyBuf],
-) -> impl TryFuture<Ok = u32, Error = Error> {
+) -> impl Future<Output = Result<serde_json::Value, ErrBox>> {
+ let rid = args.get("rid").unwrap().as_u64().unwrap() as u32;
debug!("accept rid={}", rid);
+ let resource_table = state.resource_table.clone();
poll_fn(move |cx| {
let resource_table = &mut resource_table.borrow_mut();
let listener = resource_table
.get_mut::<TcpListener>(rid)
.ok_or_else(bad_resource)?;
- listener.poll_accept(cx).map_ok(|(stream, _addr)| {
- resource_table.add("tcpStream", Box::new(stream))
- })
+ listener
+ .poll_accept(cx)
+ .map_err(ErrBox::from)
+ .map_ok(|(stream, _addr)| {
+ let rid = resource_table.add("tcpStream", Box::new(stream));
+ serde_json::json!({ "rid": rid })
+ })
})
}
@@ -265,7 +274,7 @@ fn main() {
.enable_all()
.build()
.unwrap();
- runtime.block_on(isolate).expect("unexpected isolate error");
+ deno_core::js_check(runtime.block_on(isolate));
}
#[test]