1 个不稳定版本
0.1.0 | 2021年5月17日 |
---|
#29 在 #科学
11KB
52 行
hi-tension
hi-tension
(高压缩写)是一个专为 基本 但 快速 的科学应用网络通信设计的 Rust 包。重点是传输大型无尺寸数组 f64
,以实现最大吞吐量和最小延迟。
用法
将此添加到您的 Cargo.toml
[dependencies]
hi-tension = "0.1.0"
使用库非常简单
use hi_tension::{hiread, hiwrite, hidelimiter};
// Here we use a TcpStream but anything implementing Read and Write will do
use std::net::TcpStream;
let mut stream = TcpStream::connect("127.0.0.1:34254");
// Of course, here you need a server on the other side. Please look at the
// examples to get a testing one.
// Let's allocate a small 8 MB array
let data = vec![0.0; 1_000_000];
// Of course you can go much higher, your RAM is the limit.
// let data = vec![0.0; 1_000_000_000]; // 8 GB
// Sending data over the socket is done through calling hiwrite, and then
// hidelimiter to signal your array is done.
hiwrite(&mut stream, &data)?;
hidelimiter(&mut stream);
// You may send your data in multible packets
hiwrite(&mut stream, &data[..500_000])?;
hiwrite(&mut stream, &data[500_000..])?;
hidelimiter(&mut stream);
// This is useful for example if you are calculating your data while
// transferring it.
// To receive an array, simply call hiread
let vec = hiread(&mut stream)?;
粗略协议描述
hi-tension
协议接受两种消息
- 简单文本消息,用于上下文通信和客户端应用程序定义的自定义远程过程调用。
- 高压消息,用于快速数据传输。
目前,此库仅实现 高压消息,因为 简单文本消息 可以通过 writeln!
调用轻松完成,但将来可能会改变。
高压消息 是由魔法 NaN 值 0x7ff800100400a05b
分隔的 f64
(双精度浮点数)包。
- NaN 值不应出现在有效的计算中。
- 如果出现 NaN 值,则有
1/16777214
的几率是0x7ff800100400a05b
,这小于 0.000006% 的概率。
假定字节序为 小端,但不会执行检查。如果您在 ARM 设备上使用它,请小心。
致谢
在发送 高压消息 后,发送方必须等待接收方发送的换行符 \n
,以确保成功接收。
简单文本消息 是由换行符 \n
分隔的 UTF-8 包。