3个不稳定版本
0.2.0 | 2020年6月21日 |
---|---|
0.1.1 | 2020年6月14日 |
0.1.0 | 2020年6月14日 |
#255 in WebSocket
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 build
和cargo test
将完成您需要做的几乎所有事情。
测试远远不够,帮助这一点肯定会受到赞赏 :)
许可
此crate的许可为GPL-3.0+,大致意味着如果您打包Meows并向最终用户分发二进制文件,则必须向该最终用户提供Meows代码的源代码。它有意不是AGPL许可,这意味着如果您将Meows纳入从未分发给最终用户的后端代码中,则不需要向服务用户提供代码。
依赖项
~8.5MB
~184K SLoC