#applications #communication #basic #scientific #networking #high #tension

高压

科学应用之间基本但快速的网络安全通信

1 个不稳定版本

0.1.0 2021年5月17日

#29#科学

MIT 许可证

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(双精度浮点数)包。

  1. NaN 值不应出现在有效的计算中。
  2. 如果出现 NaN 值,则有 1/16777214 的几率是 0x7ff800100400a05b,这小于 0.000006% 的概率。

假定字节序为 小端,但不会执行检查。如果您在 ARM 设备上使用它,请小心。

致谢

在发送 高压消息 后,发送方必须等待接收方发送的换行符 \n,以确保成功接收。

简单文本消息 是由换行符 \n 分隔的 UTF-8 包。

无运行时依赖项