问题标签 [rust-tokio]
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.
rust - 如何在 Rust Tokio 任务中无限期地读取无界通道?
我认为这.for_each()
可以解决问题,但它只返回通道中的第一个(未来)项目,然后返回,如果通道是空的。.for_each()
像在非 Tokio/future 上下文中那样无限期地读取任务中的频道的方法是什么?
rust - 如何从 tokio-proto 连接握手中检索信息?
我正在弄清楚如何使用tokio-proto
板条箱,特别是在建立连接时进行的握手。我从官方文档中得到了这个例子:
但是官方文档只提到了没有状态信息的握手。有没有一种通用的方法可以从握手中检索和存储有用的数据?
例如,如果在握手期间(在建立连接后的第一条消息中)服务器发送了一些稍后应该由客户端使用的密钥,那么ClientProto
实现应该如何查看该密钥?它应该存储在哪里?
file - 如何为文件句柄获取 tokio-io 的 async_read
我想从文件句柄中流式传输行,但我不知道如何满足 aFile
具有的特征界限async_read
:
错误:
查看AsyncRead
,似乎 aFile
没有标记它具有非阻塞读取。我需要降级File
到 araw_fd
然后在那里做点什么吗?
rust - 如何创建一个 tokio 专用传输来覆盖默认的刻度实现?
我正在尝试在传输中使用非默认tick()
方法编写流式传输流水线服务器。我认为这会做到这一点:
但是,尝试构建此文件会产生以下结果:
我原以为由于“专业化”,它的具体性质GearmanFramed
将允许我实现该Transport
特征,但这仍然与默认值相冲突,此处为:
multithreading - 如何从另一个线程使用 hyper::client?
我有多个线程执行一些繁重的操作,我需要在工作中使用客户端。我使用 Hyper v0.11 作为 HTTP 客户端,并且我想重用连接,因此我需要共享相同hyper::Client
的连接以保持打开连接(在keep-alive
模式下)。
客户端在线程之间不可共享(它不实现Sync
or Send
)。这是我尝试做的代码的一个小片段:
此代码无法编译:
有没有办法从不同的线程或其他方法重用同一个客户端?
asynchronous - 使用异步(tokio)rust-websocket 在客户端之间共享可变状态
我正在使用 rust-websocket 及其基于 Tokio 的异步系统在 Rust 中编写 websocket 服务器。我可以很好地为客户服务,但是,我不知道如何在客户之间共享可变状态。这是一些演示此问题的(部分)代码:
此代码错误:
在尝试编译器的建议时,我得到了这个:
我还尝试将状态包装在 a 中RefCell
(在状态本身之后创建RefCell
右侧),但是,编译器给出了类似的移动错误,因为它试图将 a 移动RefCell
到创建客户端上下文的闭包中。
rust - 使用 Hyper HTTP 客户端实现重试
我正在尝试在使用Hyper v0.11构建的客户端中实现重试,但我找不到将请求重用于不同尝试的方法:
这是编译错误:
错误很明显,但我不知道如何解决它。
rust - 创建新的 Tokio TcpServer 时使用的 `||` 运算符是什么?
我一直在尝试使用Tokio 库来玩 TCP 服务器和客户端。服务器几乎总是这样构建的:
我很想知道||
运算符的作用以及在此表达式中如何使用它?
rust - 从 futures::Stream 转发到 futures::Sink
我目前正试图围绕 tokio & futures 原语和生态系统展开思考。
我从tk-http websockets 示例开始做一些工作,并希望对接收到的数据进行更多处理,而不是回显它。第一步似乎是用某种循环替换 .forward() 调用。
在我看来,这stream.forward(sink)
相当于stream.fold(sink, |out_, item| { out.send(item).and_then(Sink::flush) })
,但是这样做(提交)根本不会轮询流。但是,与 Tokio 示例相同的更改可以正常工作(示例)。
此外,似乎首先在接收器上输出某些东西会使转发工作正常(提交),所以也许接收器由于某种原因没有在事件循环中注册,直到发送发生?我错过了什么?这可能是 tk-http 中的错误吗?
rust - 在 Iron 和 Hyper 中重用 hyper::client 和 tokio_core
我在 Iron 处理程序中发出客户请求。如何重复使用 TokioCore
和 Hyper 的Client
?我正在使用超 0.11.0 和 tokio-core 0.1。