问题标签 [rust-warp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
websocket - 在 BusReader 和 warp WebSocket sink 之间转发消息会留下未刷新的缓冲区吗?
我正在尝试创建一个 websocket 服务器(和 HTTP,因此使用 warp),它通过 websockets 将消息从一个源(MQTT 订阅)转发到许多客户端。除了客户端在第二条消息被广播之前没有收到第一条 websocket 消息之外,这似乎工作正常;然后总是留下一条消息,直到最后没有收到最后一条消息。对我来说,问题似乎是一个发送缓冲区,它永远不会在ws_connected
函数中完全刷新。
我使用futures::stream::iter将BusReader转换为流,然后将消息映射到Ok(Message)
WebSocket Sink 所需的类型。官方的 warp websocket 聊天示例使用类似的结构在流之间转发:https ://github.com/seanmonstar/warp/blob/42fd14fdab8145d27ae770fe4b5c843a99bc2a44/examples/websockets_chat.rs#L62 。
在这个精简的示例中,服务器通过总线广播值 0-9。websocat 客户端(和 Firefox 中的 JS websocket 客户端)接收消息 0-8——尽管总是在广播和服务器的标准输出后面——但 9 永远不会到达。然而,该async_bus_print
函数按时接收所有值,这证明消息至少通过总线没有问题。
这是服务器进程的输出:
有问题的代码:
如何追踪并消除这个“缓冲”问题?
希望我已经解释得足够好。如果我能提供更多信息,请告诉我。谢谢你的帮助。
rust - 处理拒绝时获取当前路径
我想知道如何在 Warp 的拒绝处理程序中获取 HTTP 路径?我有以下拒绝方法:
例如,我会打电话curl localhost:1234/this-aint-valid-path/123
并希望能够访问以/this-aint-valid-path/123
进行日志记录,并将其作为错误响应的一部分返回。
rust - 闭包体的生命周期与传入其中的值不匹配
我有以下情况:
编译器抱怨潜在的生命周期问题:
是否rpc_endpoint.as_str()
像所有参考文献一样,是否会比闭包更长寿Copy
?
asynchronous - 如何在路由处理程序异步的同时使用 Warp 实现共享应用程序状态?
我有一个使用warp
. 它实现了一个 RESTful CRUD API。我需要每个路由处理程序(即最终由 warp 过滤器调用的函数)来访问和(在大多数情况下)改变共享的应用程序状态。
我可以编译它的唯一方法是Arc<Mutex<State>>
为每条路线克隆一个:
我怀疑这实际上是正确的行为(尽管编译和运行)。
对于一个相对简单的要求,这似乎非常难看。
最重要的是,在我的路由处理程序中,我需要调用
async
函数,因此需要将处理程序本身标记为async
等。当我将处理程序标记为 时async
,编译器会抱怨由于期货无法跨线程发送。
如何在拥有路由处理程序本身的同时实现共享应用程序状态async
?
路由处理程序的签名(它们都是一样的):
rest - 为什么 warp 会为输入错误的参数返回 HTTP 405 Method Not Allowed?
在 warp 中考虑以下路由规范:
如果 URL 中提供了 non- Address
,warp 会自动返回 HTTP 405 Method Not Allowed 状态代码:
为什么是 HTTP 405?为什么不是 HTTP 400 或任何其他客户端错误?
rust - 如何根据路径后缀创建warp route?
我需要warp
为所有以扩展名结尾的 URL 创建一个路由,无论 URL 路径中的段数如何,例如path.ext
,some/path.ext
并且some/other/path.ext
应该由相同的路由处理。
我越接近解决方案就是这种技术,但它要求路径段在编译时是固定的并且是已知的,这不是我的情况。
rust - 实现 TryFrom 特征时的类型错误
我正在尝试实现std::convert::TryFrom<OutputMessage>
wherewarp::filters::ws::Message
是OutputMessage
一个可以序列化的简单结构serde_json::to_string()
:
但是,函数签名出现以下错误:
而这个是返回的Err(())
:
有没有办法使这个实现工作,也许通过改变它的Error
类型?或者这种特质实现真的不可能吗?
rust - rust 网络服务器中的 oneshot 接收器的神秘下降
我正在使用 warp 和 tokio 使我的网络服务器生锈。这就是我正在做的事情:
- 我正在创建三个 tokio 运行时,并在它们上执行 3 个异步函数,所有这些函数都使用通道相互通信。我这样做是因为我正在制作一个用于模型推理的网络服务器,每个部分负责一件事(预处理和批处理,从 tf 模型推断,以及服务器本身)。
- 每个请求的响应处理程序通过 mpsc 发送器将它接收到的数据传递给在另一个运行时运行的函数,该发送器的一个克隆被传递给所有处理程序。它还为另一个运行时传递一个单一的 Sender 以将结果发送回响应处理程序。
这适用于中等负载,但在重负载(50 个线程,100 个循环)下,响应处理程序中的 oneshot 接收器似乎被丢弃,服务器无法返回结果。
我在下面附上了一个最小的可重现示例:
我一直Didn't send anything, the oneshot reciever was closed
在加载日志。
这是怎么回事?这与它的架构方式或warp如何处理请求有关吗?我会很感激任何帮助。
rust - Warp 中的 API 密钥验证 (Rust)
我正在尝试开始使用 warp 并测试 api 密钥验证。以下代码有效,但效果不佳。
验证函数从标头中提取密钥。成功验证后,不再使用密钥,但“handle_request”函数需要为其输入参数。
您能否就如何避免不需要的输入参数和使用 warp 进行 api 密钥验证的更简洁方法提出建议?
提前致谢!
更新: 当我尝试避免使用“key_validation”函数提取一些内容时,我收到此错误:
为了解决这个问题,我尝试了:
结果是:
这些是使用的依赖项:
http - 在 warp::reply::with_status 中返回拥有的字符串
我有一个经纱服务器正在运行,对于每个请求,我都需要计算一个字符串,然后返回带有特定状态代码的字符串。
但是,这不起作用,因为 reply::with_status 需要一种&str
.
所以我尝试了:
(因为 &String derefs to &str)——但这也不起作用,因为你不能返回对当前作用域拥有的变量的引用(将被删除)
使用时如何返回 aString
作为响应warp
?