#async

meows

WebSocket上的异步服务消息的简单模式

3个不稳定版本

0.2.0 2020年6月21日
0.1.1 2020年6月14日
0.1.0 2020年6月14日

#255 in WebSocket

GPL-3.0+

28KB
266

通过WebSocket进行消息交换 🐈

此crate实现了在WebSocket连接上实现服务间消息交换所需的简单模式。meows的使用者可以处理类型化JSON消息,并为任何未类型化的消息提供默认处理程序选项。

Meows构建在https://github.com/stjepang/smol[smol]之上,用于异步WebSocket处理行为。这使得Meows与其他基于smol的应用程序兼容,包括使用https://github.com/async-rs/async-std[async-std] 1.6.0或更高版本的应用程序。

所有要处理的消息都必须使用以下描述的meows适当信封包装

{
    "type" : "ping",
    "value" : {
        "msg" : "Hey kitty kitty"
    }
}

然后将被映射到以下结构体

#[derive(Debug, Deserialize, Serialize)]
struct Ping {
    msg: String,
}

本质上,任何serde可以反序列化的东西都可以通过meows传递。

示例

examples/目录中有示例,以下是一个简单的消息处理程序

use log::*;
use meows::*;
use smol;

async fn handle_ping(mut req: Request<()>) -> Option<Message> {
    if let Some(ping) = req.from_value::<Ping>() {
        info!("Ping received with message: {}", ping.msg);
    }
    Some(Message::text("pong"))
}

fn main() -> Result<(), std::io::Error> {
    info!("Starting simple ping/pong websocket server with meows");
    let mut server = meows::Server::new();
    server.on("ping", handle_ping);

    smol::run(async move {
        server.serve("127.0.0.1:8105".to_string()).await
    })
}

贡献

Meows是一个典型的Rust项目,例如cargo buildcargo test将完成您需要做的几乎所有事情。

测试远远不够,帮助这一点肯定会受到赞赏 :)

许可

此crate的许可为GPL-3.0+,大致意味着如果您打包Meows并向最终用户分发二进制文件,则必须向该最终用户提供Meows代码的源代码。它有意不是AGPL许可,这意味着如果您将Meows纳入从未分发给最终用户的后端代码中,则不需要向服务用户提供代码。

依赖项

~8.5MB
~184K SLoC