37次发布
新 0.2.12 | 2024年8月12日 |
---|---|
0.2.11 | 2024年7月10日 |
0.2.6 | 2024年5月23日 |
0.2.3 | 2024年3月28日 |
0.0.5 | 2022年11月29日 |
#302 in Web编程
每月46次下载
500KB
8K SLoC
Viam Rust Utils
在Rust中构建,用于各种Viam SDKs及其它
先决条件
在Mac和Unix-like上安装Rust
在完成以下步骤之前,请确保没有其他Rust的安装,例如对于Mac,您需要运行 brew uninstall rust
然后运行以下命令 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
在您喜欢的终端中,如果您以前已经安装了rustup,则只需运行 rustup update
。安装程序应更新PATH环境变量,运行 which rustc
应该看到类似 ~/.cargo/bin/rustc
的内容,如果不是这样,您可能需要重新加载终端,如果仍然不起作用,那么您应该在PATH环境变量中添加 ~/.cargo/bin
(更多信息 这里)
仓库布局
src/gen
所有Google和Viam API proto文件src/dial
用于机器人点对点连接的基于WebRTC的gRPC实现src/dialdbg
用于调试dial逻辑的命令行工具。请参阅src/dialdbg/README.md
。src/ffi
用于dial逻辑的FFI包装器src/proxy
创建Unix套接字以作为连接代理的逻辑examples
示例列表
入门指南
本库中的逻辑旨在与Viam的SDK(Rust及其他)一起使用,而不是作为独立产品。要了解更多关于使用此处包含的逻辑的信息,请参阅rust-sdk或python-sdk。如果您想验证此代码是否工作,可以导航到示例文件夹并运行cargo run --bin test-echo
(您需要提供自己的机器人的凭据,或参阅下面的说明)
回声流示例
回声示例与goutils样本服务器通信。它演示了单个、流式和双向通信。要测试,导航到您的goutils克隆并运行
go run rpc/examples/echo/server/cmd/main.go
请注意信令端口,并将examples/src/echo/main.rs中的端口号替换为您自己的端口,如下所示
let c = dial::DialOptions::builder()
.uri("localhost:<your-port>")
.without_credentials()
.allow_downgrade()
.connect
.await?;
然后,从examples/
目录运行
cargo run --bin test-echo
使用FFI(外部函数接口)
rust SDK公开了一些符合平台C调用约定的函数。大多数语言都支持调用C代码,但它们的特定实现超出了本README的范围。然而,我们提供了C++的示例。
设置
目前我们只支持类Unix系统。在继续之前,请确保已安装了GRPCCpp。导航到
cd examples/src/ffi/cpp
# Then
make buf
回声示例
回声示例与goutils样本服务器通信,导航到您的goutils克隆并运行
go run rpc/examples/echo/server/cmd/main.go
然后运行
make ffi_echo && ./ffi_echo
机器人示例
机器人示例与rdk服务器通信。在ffi_robot.cc文件中更新dial函数,使用您的地址和密钥
dial("<robot-address>",
"<robot-secret>",
false, ptr);
然后运行
make ffi_robot && ./ffi_robot
关于连接性和WebRTC功能的两个注意事项
首先:rust SDK默认尝试通过WebRTC进行拨号。您可以通过在dial构建器上调用disable_webrtc()
来覆盖此设置,如下所示
let c = dial::DialOptions::builder()
.uri("test-main.33vvxnbbw9.local.viam.cloud:8080") // Robot address
.with_credentials(creds) // credentials
.disable_webrtc() // forces gRPC connection
.connect()
.await?; // if the connection complete you will have a channel otherwise an error
其次:rust WebRTC实现仍然很新,可能存在bug。至少,我们预计调用ShellService::shell()
存在异常行为的高可能性。如果您在WebRTC上遇到任何流请求的问题,直接拨号(如上所述禁用WebRTC)应解决这些问题。并且请提交一个bug报告!我们将努力尽快响应并解决问题。
许可证
版权所有 2021-2022 Viam Inc。
Apache 2.0 - 请参阅LICENSE文件
依赖关系
~67MB
~1.5M SLoC