Skip to content

Commit f1851a2

Browse files
committed
ws
1 parent 7547598 commit f1851a2

40 files changed

Lines changed: 1384 additions & 1 deletion
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "actix-websocket"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
actix-web = "4"
8+
actix-ws = "0.3"
9+
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
FROM rust:1-bookworm AS build
2+
WORKDIR /app
3+
4+
COPY Cargo.toml Cargo.lock* ./
5+
COPY src/ src/
6+
7+
RUN cargo build --release
8+
9+
FROM debian:bookworm-slim
10+
WORKDIR /app
11+
12+
COPY --from=build /app/target/release/actix-websocket .
13+
14+
EXPOSE 8080
15+
ENTRYPOINT ["./actix-websocket"]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"display_name": "actix-websocket",
3+
"language": "Rust",
4+
"type": "framework",
5+
"engine": "Actix",
6+
"description": "Actix-web WebSocket echo server",
7+
"repo": "https://github.com/actix/actix-web",
8+
"enabled": true,
9+
"tests": ["echo-ws"]
10+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use actix_web::{web, App, HttpServer, HttpRequest, HttpResponse};
2+
use actix_ws;
3+
4+
async fn ws_handler(req: HttpRequest, body: web::Payload) -> actix_web::Result<HttpResponse> {
5+
let (response, mut session, mut msg_stream) = actix_ws::handle(&req, body)?;
6+
actix_web::rt::spawn(async move {
7+
while let Some(Ok(msg)) = msg_stream.recv().await {
8+
match msg {
9+
actix_ws::Message::Text(text) => { let _ = session.text(text).await; }
10+
actix_ws::Message::Binary(bin) => { let _ = session.binary(bin).await; }
11+
actix_ws::Message::Ping(bytes) => { let _ = session.pong(&bytes).await; }
12+
actix_ws::Message::Close(_) => break,
13+
_ => {}
14+
}
15+
}
16+
});
17+
Ok(response)
18+
}
19+
20+
#[tokio::main]
21+
async fn main() -> std::io::Result<()> {
22+
println!("Application started.");
23+
HttpServer::new(|| {
24+
App::new()
25+
.route("/ws", web::get().to(ws_handler))
26+
})
27+
.bind("0.0.0.0:8080")?
28+
.run()
29+
.await
30+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM oven/bun:latest
2+
WORKDIR /app
3+
COPY server.ts entrypoint.sh ./
4+
RUN chmod +x entrypoint.sh
5+
EXPOSE 8080
6+
CMD ["./entrypoint.sh"]
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/sh
2+
CPUS=$(nproc)
3+
for i in $(seq 1 "$CPUS"); do
4+
bun run /app/server.ts &
5+
done
6+
wait

frameworks/bun-websocket/meta.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"display_name": "bun-websocket",
3+
"language": "TS",
4+
"type": "framework",
5+
"engine": "Bun",
6+
"description": "Bun WebSocket echo server",
7+
"repo": "https://github.com/oven-sh/bun",
8+
"enabled": true,
9+
"tests": [
10+
"echo-ws"
11+
]
12+
}

frameworks/bun-websocket/server.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Bun.serve({
2+
port: 8080,
3+
reusePort: true,
4+
fetch(req, server) {
5+
if (new URL(req.url).pathname === "/ws") {
6+
if (server.upgrade(req)) return;
7+
return new Response("Upgrade failed", { status: 400 });
8+
}
9+
return new Response("Not found", { status: 404 });
10+
},
11+
websocket: {
12+
message(ws, message) {
13+
ws.send(message);
14+
},
15+
},
16+
});
17+
18+
console.log("Application started.");
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM denoland/deno:2.2.2
2+
WORKDIR /app
3+
COPY server.ts .
4+
RUN deno cache server.ts
5+
EXPOSE 8080
6+
CMD ["deno", "serve", "--parallel", "--port", "8080", "--host", "0.0.0.0", "-A", "server.ts"]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"display_name": "deno-websocket",
3+
"language": "TS",
4+
"type": "framework",
5+
"engine": "Deno",
6+
"description": "Deno WebSocket echo server",
7+
"repo": "https://github.com/denoland/deno",
8+
"enabled": true,
9+
"tests": [
10+
"echo-ws"
11+
]
12+
}

0 commit comments

Comments
 (0)