Untrack .claude/; placeholder README; ignore local config dirs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
7c1edffd6e
commit
f8c86e315f
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"Bash(cd:*)",
|
|
||||||
"WebFetch(domain:github.com)",
|
|
||||||
"WebFetch(domain:raw.githubusercontent.com)",
|
|
||||||
"WebFetch(domain:api.github.com)",
|
|
||||||
"Bash(xargs grep:*)",
|
|
||||||
"Bash(jfr summary:*)",
|
|
||||||
"Bash(jfr print:*)",
|
|
||||||
"Bash(sort -t= -k4 -rn)",
|
|
||||||
"Bash(sed 's/.*objectClass = //')",
|
|
||||||
"Bash(sed 's/ \\(.*//')",
|
|
||||||
"Bash(sed 's/^\\\\s*//')",
|
|
||||||
"Bash(jar tf:*)",
|
|
||||||
"Bash(javap -c -p /c/Users/elorc/.m2/repository/dev/relism/fpr-core/1.1.0/fpr-core-1.1.0.jar!/dev/relism/fpr/core/internal/runtime/FrozenRouter.class)",
|
|
||||||
"Read(//c/tmp/**)",
|
|
||||||
"Bash(jar xf:*)",
|
|
||||||
"Bash(javap -c -p dev/relism/fpr/core/internal/runtime/FrozenRouter.class)",
|
|
||||||
"Bash(javap -c -p dev/relism/fpr/core/internal/runtime/RouteSearch.class)"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -39,6 +39,7 @@ build/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
CLAUDE.md
|
CLAUDE.md
|
||||||
|
.claude/
|
||||||
|
|
||||||
### Local / scratch ###
|
### Local / scratch ###
|
||||||
flash/src/main/java/dev/relism/Main.java
|
flash/src/main/java/dev/relism/Main.java
|
||||||
|
|||||||
@@ -1,83 +1 @@
|
|||||||
# Flash
|
# Flash
|
||||||
|
|
||||||
A high-performance HTTP/1.1 server library for Java 21+, built for low-latency workloads.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- **Virtual threads** — one virtual thread per connection via `Executors.newVirtualThreadPerTaskExecutor()`
|
|
||||||
- **Zero-allocation hot path** — header buffer reused across keep-alive requests; `ByteView` slices avoid copies
|
|
||||||
- **Fast routing** — `fpr-core` compiles routes into a byte-level finite automaton at first request; path params via `PathParams`
|
|
||||||
- **Two-tier router** — mounted sub-routers matched by longest prefix, then `FastPathRouterImpl` fallback
|
|
||||||
- **Middleware chain** — composable `Middleware` lambdas fused at registration time (no per-request allocation)
|
|
||||||
- **Chunked transfer** — `ChunkedInputStream` de-chunks on the fly, keeps socket positioned for pipelining
|
|
||||||
- **Request body** — `bytes()` for full materialization or `stream()` for zero-copy streaming
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
- Java 21+
|
|
||||||
- Maven 3.8+
|
|
||||||
|
|
||||||
## Build
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mvn clean package -DskipTests
|
|
||||||
```
|
|
||||||
|
|
||||||
## Quick start
|
|
||||||
|
|
||||||
```java
|
|
||||||
HttpServer server = new HttpServer(
|
|
||||||
HttpServerConfiguration.builder().port(8080).build()
|
|
||||||
);
|
|
||||||
|
|
||||||
server.get("/hello", (req, res) -> "Hello, world!");
|
|
||||||
|
|
||||||
server.register(new MyHandler()); // @Route(path="/...", method=GET)
|
|
||||||
|
|
||||||
server.start().thenRun(() -> System.out.println("Listening on :8080"));
|
|
||||||
```
|
|
||||||
|
|
||||||
## Handler styles
|
|
||||||
|
|
||||||
**Lambda:**
|
|
||||||
```java
|
|
||||||
server.get("/ping", (req, res) -> "pong");
|
|
||||||
```
|
|
||||||
|
|
||||||
**Class-based (`@Route`):**
|
|
||||||
```java
|
|
||||||
@Route(path = "/users/{id}", method = HttpMethod.GET)
|
|
||||||
public class GetUser extends RequestHandler {
|
|
||||||
@Override
|
|
||||||
public Object handle(Request req, Response res) {
|
|
||||||
String id = req.pathParam("id");
|
|
||||||
return "{\"id\":\"" + id + "\"}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**Middleware:**
|
|
||||||
```java
|
|
||||||
Middleware cors = next -> (req, res) -> {
|
|
||||||
res.header("Access-Control-Allow-Origin", "*");
|
|
||||||
return next.handle(req, res);
|
|
||||||
};
|
|
||||||
server.register(new GetUser(), cors);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Maven dependency
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<id>relism-releases</id>
|
|
||||||
<url>https://maven.relism.dev/releases</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>dev.relism</groupId>
|
|
||||||
<artifactId>flash</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
```
|
|
||||||
|
|||||||
Reference in New Issue
Block a user