本项目实现了 12 种语言的音频流传输系统,使用内存映射文件 (mmap) 进行高效缓存。
- 启动任意语言的服务端(监听 8080 端口)
- 运行任意语言的客户端上传音频文件
- 客户端从服务端下载文件
- 验证文件完整性(SHA-256)
编译:
cd hello-cpp
./build.sh运行服务端:
./run-server.sh运行客户端:
./run-client.sh ws://localhost:8080/audio ../audio/input/hello.mp3mmap 实现: 原生 POSIX (sys/mman.h) / Windows API,分段映射 1GB
编译:
cd hello-rust
./scripts/build-server.sh运行服务端:
./scripts/run-server.sh运行客户端:
./scripts/run-client.shmmap 实现: memmap2 crate,MmapMut 可变内存映射
编译:
cd hello-java/audio-stream-server
mvn clean package -DskipTests运行服务端:
java --enable-preview -jar target/audio-stream-server-1.0.0.jar运行客户端:
cd ../audio-stream-client
mvn clean package -DskipTests
java --enable-preview -jar target/audio-stream-client-1.0.0.jar --input ../../audio/input/hello.mp3mmap 实现: java.nio.MappedByteBuffer,1GB 分段映射
编译:
cd hello-kotlin
./build.sh运行服务端:
cd server
./run-server.sh运行客户端:
cd ../client
./run-client.sh --input ../../audio/input/hello.mp3mmap 实现: Java 的 MappedByteBuffer 通过 JNA
安装依赖:
cd hello-python
./build.sh运行服务端:
source venv/bin/activate
python -m audio_server.audio_server_application运行客户端:
source venv/bin/activate
./run-client.sh --input ../audio/input/hello.mp3mmap 实现: 标准库 mmap.mmap,动态调整映射大小
编译:
cd hello-go
go build ./...运行服务端:
./bin/server运行客户端:
./run-client.sh --input ../audio/input/hello.mp3mmap 实现: 使用 syscall 实现原生 Memory Mapping (Unix/Windows)
编译:
cd hello-csharp
./build.sh运行服务端:
./run-server.sh运行客户端:
./run-client.sh --input ../audio/input/hello.mp3mmap 实现: System.IO.MemoryMappedFiles.MemoryMappedFile
编译:
cd hello-swift
./build.sh运行服务端:
./run-server.sh运行客户端:
./run-client.sh --input ../audio/input/hello.mp3mmap 实现: 使用 Darwin 模块调用原生 mmap C API
编译:
cd hello-dart
./build.sh运行服务端:
./run-server.sh运行客户端:
./run-client.sh --input ../audio/input/hello.mp3mmap 实现: 使用 dart:ffi 调用系统原生 mmap/CreateFileMapping
安装依赖:
cd hello-nodejs
npm install运行服务端:
node src/server.js运行客户端:
./run-client.sh --input ../audio/input/hello.mp3mmap 实现: 使用 mmap-io 原生模块实现零拷贝内存映射
安装依赖:
cd hello-typescript
npm install
npm run build运行服务端:
./scripts/build-server.sh
./scripts/build-client.sh运行服务端:
./scripts/run-server.sh运行客户端:
./scripts/run-client.sh --input ../audio/input/hello.mp3mmap 实现: 同 Node.js (mmap-io)
编译:
cd hello-php
./scripts/build-server.sh
./scripts/build-client.sh运行服务端:
./scripts/run-server.sh运行客户端:
./scripts/run-client.sh --input ../audio/input/hello.mp3mmap 实现: 使用 FFI 调用系统原生 mmap/CreateFileMapping
// 开始上传
{"type": "START", "streamId": "stream-123"}
// 上传完成
{"type": "STOP", "streamId": "stream-123"}
// 下载数据
{"type": "GET", "streamId": "stream-123", "offset": 0, "length": 65536}- 上传:二进制帧,8KB 分块
- 下载:二进制帧,64KB 分块
| 类型 | 语言 | 配置 |
|---|---|---|
| 原生 mmap | C++, Rust, Python, Go, Swift, Node.js, TypeScript | 8GB 缓存, 1GB 分段 |
| JVM/CLR/FFI | Java, Kotlin, C#, Dart, PHP | 8GB 缓存, 1GB 分段 |
所有实现均遵循统一规范 v2.0.0:
- DEFAULT_PAGE_SIZE: 64MB
- MAX_CACHE_SIZE: 8GB
- SEGMENT_SIZE: 1GB
- BATCH_OPERATION_LIMIT: 1000
详细技术文档请参考 doc/mmap.md