9 个版本
0.4.0 | 2022 年 7 月 22 日 |
---|---|
0.3.0 | 2021 年 8 月 5 日 |
0.2.0 | 2021 年 8 月 2 日 |
0.0.6 | 2019 年 11 月 29 日 |
#1413 in 异步
每月 58 次下载
22KB
294 行
一个用于 Tokio 的 HL7 MLLP 编解码器
这是一个 tokio 玩乐项目,在 tokio 编码器中实现对 HL7 最小底层消息传输协议 (MLLP) 的支持。
通过 cargo r --release --example listener
在 127.0.0.1:8080 运行示例监听器,或使用 cargo r --release --example publisher
运行示例发布者
文档可以从 cargo doc --lib --open
获得
lib.rs
:
HL7 MLLP 网络协议的 tokio 编解码器实现。
HL7 的 MLLP 是一个简单、基于单字节文本的协议,用于在 TCP(或类似)传输上封装 HL7 消息。完整的规范可在 HL7 网站 上找到(注意,他们将标准放在免费会员/登录表单后面)。
此 crate 提供了一个 Codec 实现,可以编码/解码从 Tokio 流中读取的 MLLP 帧,允许以简单的方式编程访问消息(包括主消息和 ack/nack)。
Tokio(以及 Rust 异步生态系统)目前处于动荡状态,但源代码中有两个简单的(非生产就绪!)示例,一个是发布者,一个是监听器。请注意,这些示例只是将输出写入控制台,这可能会严重限制吞吐量。如果您想使用示例进行简单的性能测试,请确保最小化写入的数据量。
示例
这是一个高度简化的示例,摘自源控制中的示例。
出版商
use bytes::*;
use tokio_util::codec::Framed;
use tokio::net::TcpStream;
use futures::{SinkExt, StreamExt};
use hl7_mllp_codec::MllpCodec;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Open a TCP stream to the socket address.
let stream = TcpStream::connect("127.0.0.1:8080").await?;
// Construct a MLLP transport using our codec
let mut transport = Framed::new(stream, MllpCodec::new());
// Send some bytes wrapped in MLLP (Note: not a valid HL7 message)
transport.send(BytesMut::from("Hello World")).await?; //because this is through the codec it gets wrapped in MLLP header/footer for us
if let Some(response) = transport.next().await {
match response{
Ok(msg) => println!(" Received response: {:?}", msg),
Err(e) => println!(" ERROR: {:?}", e)
}
}
Ok(())
}
箱子功能
默认情况下,这个箱子被设计成严格遵循MLLP规范,然而在生产环境中,有些系统不遵守标准。在这些情况下,有一个名为noncompliance
的功能可用,它允许一些不合规的行为
- 在发布者未能等待确认/否定应答的情况下,移除了假设线上只存在一条消息,并异步发布多条消息
依赖项
~2.5–3.5MB
~56K SLoC