问题标签 [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.

0 投票
1 回答
397 浏览

websocket - 在 BusReader 和 warp WebSocket sink 之间转发消息会留下未刷新的缓冲区吗?

我正在尝试创建一个 websocket 服务器(和 HTTP,因此使用 warp),它通过 websockets 将消息从一个源(MQTT 订阅)转发到许多客户端。除了客户端在第二条消息被广播之前没有收到第一条 websocket 消息之外,这似乎工作正常;然后总是留下一条消息,直到最后没有收到最后一条消息。对我来说,问题似乎是一个发送缓冲区,它永远不会在ws_connected函数中完全刷新。

我使用futures::stream::iterBusReader转换为流,然后将消息映射到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函数按时接收所有值,这证明消息至少通过总线没有问题。

这是服务器进程的输出:

有问题的代码:

如何追踪并消除这个“缓冲”问题?

希望我已经解释得足够好。如果我能提供更多信息,请告诉我。谢谢你的帮助。

0 投票
1 回答
53 浏览

rust - 处理拒绝时获取当前路径

我想知道如何在 Warp 的拒绝处理程序中获取 HTTP 路径?我有以下拒绝方法:

例如,我会打电话curl localhost:1234/this-aint-valid-path/123并希望能够访问以/this-aint-valid-path/123进行日志记录,并将其作为错误响应的一部分返回。

0 投票
1 回答
76 浏览

rust - 闭包体的生命周期与传入其中的值不匹配

我有以下情况:

编译器抱怨潜在的生命周期问题:

是否rpc_endpoint.as_str()像所有参考文献一样,是否会比闭包更长寿Copy


0 投票
1 回答
1160 浏览

asynchronous - 如何在路由处理程序异步的同时使用 Warp 实现共享应用程序状态?

我有一个使用warp. 它实现了一个 RESTful CRUD API。我需要每个路由处理程序(即最终由 warp 过滤器调用的函数)来访问和(在大多数情况下)改变共享的应用程序状态。

我可以编译它的唯一方法是Arc<Mutex<State>> 为每条路线克隆一个:

  1. 我怀疑这实际上是正确的行为(尽管编译和运行)。

  2. 对于一个相对简单的要求,这似乎非常难看。

  3. 最重要的是,在我的路由处理程序中,我需要调用async函数,因此需要将处理程序本身标记为async等。当我将处理程序标记为 时async,编译器会抱怨由于期货无法跨线程发送。

如何在拥有路由处理程序本身的同时实现共享应用程序状态async

路由处理程序的签名(它们都是一样的):

0 投票
2 回答
458 浏览

rest - 为什么 warp 会为输入错误的参数返回 HTTP 405 Method Not Allowed?

在 warp 中考虑以下路由规范:

如果 URL 中提供了 non- Address,warp 会自动返回 HTTP 405 Method Not Allowed 状态代码:

为什么是 HTTP 405?为什么不是 HTTP 400 或任何其他客户端错误?

0 投票
1 回答
433 浏览

rust - 如何根据路径后缀创建warp route?

我需要warp为所有以扩展名结尾的 URL 创建一个路由,无论 URL 路径中的段数如何,例如path.extsome/path.ext并且some/other/path.ext应该由相同的路由处理。

我越接近解决方案就是这种技术,但它要求路径段在编译时是固定的并且是已知的,这不是我的情况。

0 投票
0 回答
376 浏览

rust - 实现 TryFrom 特征时的类型错误

我正在尝试实现std::convert::TryFrom<OutputMessage>wherewarp::filters::ws::MessageOutputMessage一个可以序列化的简单结构serde_json::to_string()

但是,函数签名出现以下错误:

而这个是返回的Err(())

有没有办法使这个实现工作,也许通过改变它的Error类型?或者这种特质实现真的不可能吗?

0 投票
0 回答
221 浏览

rust - rust 网络服务器中的 oneshot 接收器的神秘下降

我正在使用 warp 和 tokio 使我的网络服务器生锈。这就是我正在做的事情:

  • 我正在创建三个 tokio 运行时,并在它们上执行 3 个异步函数,所有这些函数都使用通道相互通信。我这样做是因为我正在制作一个用于模型推理的网络服务器,每个部分负责一件事(预处理和批处理,从 tf 模型推断,以及服务器本身)。
  • 每个请求的响应处理程序通过 mpsc 发送器将它接收到的数据传递给在另一个运行时运行的函数,该发送器的一个克隆被传递给所有处理程序。它还为另一个运行时传递一个单一的 Sender 以将结果发送回响应处理程序。

这适用于中等负载,但在重负载(50 个线程,100 个循环)下,响应处理程序中的 oneshot 接收器似乎被丢弃,服务器无法返回结果。

我在下面附上了一个最小的可重现示例:

我一直Didn't send anything, the oneshot reciever was closed在加载日志。

这是怎么回事?这与它的架构方式或warp如何处理请求有关吗?我会很感激任何帮助。

0 投票
1 回答
566 浏览

rust - Warp 中的 API 密钥验证 (Rust)

我正在尝试开始使用 warp 并测试 api 密钥验证。以下代码有效,但效果不佳。

验证函数从标头中提取密钥。成功验证后,不再使用密钥,但“handle_request”函数需要为其输入参数。

您能否就如何避免不需要的输入参数和使用 warp 进行 api 密钥验证的更简洁方法提出建议?

提前致谢!

更新: 当我尝试避免使用“key_validation”函数提取一些内容时,我收到此错误:

为了解决这个问题,我尝试了:

结果是:

这些是使用的依赖项:

0 投票
1 回答
243 浏览

http - 在 warp::reply::with_status 中返回拥有的字符串

我有一个经纱服务器正在运行,对于每个请求,我都需要计算一个字符串,然后返回带有特定状态代码的字符串。

但是,这不起作用,因为 reply::with_status 需要一种&str.

所以我尝试了:

(因为 &String derefs to &str)——但这也不起作用,因为你不能返回对当前作用域拥有的变量的引用(将被删除)

使用时如何返回 aString作为响应warp