8 个版本

0.1.6 2023年6月11日
0.1.5 2023年4月25日
0.1.3 2023年3月8日
0.1.1 2023年2月20日

#sending 中排名 9

Download history 4/week @ 2024-03-15 33/week @ 2024-03-29 11/week @ 2024-04-05

每月下载量 82
用于 pocket-relay

MIT 许可证

67KB
929

Interlink

License Cargo Version Cargo Downloads

Interlink 异步框架

InterlinkTokio 异步运行时上运行,使用 "Services" 结构化应用程序的部分,可以使用 "Links" 进行通信,允许向服务发送消息,然后进行处理

🚩 此项目处于非常初级的婴儿期,因此预期会有重大变更,在此阶段,它尚未完全实现或测试所有功能

将以下 cargo 依赖项添加到项目中以包含 interlink

[dependencies]
interlink = "0.1" 

启动服务

为了获取服务链接并使服务运行,您首先需要启动服务

use interlink::prelude::*;

/// Define your backing structure for the service you can use
/// the service derive macro here or implement the trait to
/// get access to the `started` and `stopping` hooks
#[derive(Service)]
struct Example;

// You must be within the tokio runtime to use interlink
#[tokio::main]
async fn main() {
    // Create the service
    let service = Example {};
    // Start the service to get a link to the service
    let link = service.start();
}

向服务发送消息

为了与服务和之间通信,您使用消息。以下是如何创建和发送消息的示例。

use interlink::prelude::*;

// Define your backing structure for the service
#[derive(Service)]
struct Example;

// The message struct with a string response type
#[derive(Message)]
#[msg(rtype = "String")]
struct TextMessage {
    value: String,
}

/// Implement a handler for the message type
impl Handler<TextMessage> for Example {

    /// Basic response type which just responds with the value
    type Response = Mr<TextMessage>;

    fn handle(
        &mut self, 
        msg: TextMessage, 
        ctx: &mut ServiceContext<Self>
    ) -> Self::Response {
        println!("Got message: {}", &msg.value);
        Mr(msg.value)
    }
}

// You must be within the tokio runtime to use interlink
#[tokio::main]
async fn main() {
    // Create the service
    let service = Example {};
    // Start the service to get a link to the service
    let link = service.start();

    // Send the text message to the service and await the response
    let res: String = link.send(TextMessage {
            value: "Example".to_string(),
        })
        .await
        .unwrap();

    assert_eq!(&res, "Example");

    // You can also send without waiting for a response
    link.do_send(TextMessage {
            value: "Example".to_string(),
        })
        .unwrap();

}

依赖项

~2.6–4MB
~72K SLoC