
async-std
qwsaedca
这个作者很懒,什么都没留下…
展开
-
3.教程:使用async-std编写聊天服务(3.8 处理客户端断线连接)
3.8 处理客户端断线连接 目前,我们只在broker中上添加新的客户端连接。 这显然是错误的:如果一个对等方关闭了与聊天室的连接,我们不应该再尝试向它发送任何消息。处理断开连接的一个微妙之处在于,我们可以在读操作的任务或写操作的任务中检测到客户端连接是否连接着。在这两种情况下,最直接的解决方案就是从管理客户端连接的map中移除客户端连接,但这样做是错误的。如果...原创 2019-12-27 17:31:55 · 364 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.7 完全关闭)
3.7 完全关闭当前实现的一个问题是它不能处理正常关闭。如果我们出于某种原因而中断了accept循环,那么所有的正运行任务都将被丢弃。更正确的关机顺序是:不再接受新的客户 把未处理完的消息正常处理完 (这聊天服务中主要是指把未发送给客户端的消息正常发送出去) 然后开始退出程序在基于通道的体系结构中,是很容易完全关闭的,尽管这样操作可能看起来是不可思议的。因为在Rust中,通道的接...原创 2019-12-27 15:19:49 · 235 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.6 聊天服务所有职责角色)
At this point, we only need to start the broker to get a fully-functioning (in the happy case!) chat:在这一点上,我们只需要启动代理程序就可以得到一个完全正常的运行(在愉快的情况下!)聊天:use async_std::{ io::BufReader, net::{TcpLi...原创 2019-12-26 18:53:15 · 305 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.5 连接读和写操作交互)
3.5 连接读和写操作交互那么,我们如何确保在connection_loop中读取的消息传递connection_writer_loop相关的接收人(Alice给bob发送消息,如何确保bob接收到消息)?我们应该以某种方式维护一个对等点:HashMap<String, Sender<String>>,它允许客户端查找到目标channels。然而,这个map可能是一...原创 2019-12-26 18:44:47 · 172 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.4 发送消息)
3.4 发送消息现在是时候实现另一半了——发送消息。实现发送的一个最明显的方法是让每个connection_loop访问彼此客户端的TcpStream的写半部分。这样,客户端就可以直接向所有接收人发送消息。但是,这是错误的:如果Alice给bob发送foo,Charley给bob发送bar,bob实际上可能会收到fobaor。通过套接字发送消息可能需要几个系统调用,因此两个并发的。...原创 2019-12-26 18:29:48 · 286 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.3 接收消息)
3.3 接收消息让我们实现接收部分的协议。我们需要:TcpStream并将字节按分割符\n拆分后解码为utf-8将第一行解释为登录将其余行解析为login:messageuse async_std::{ io::BufReader, net::TcpStream,};async fn accept_l...原创 2019-12-26 18:21:38 · 274 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(3.2编写Accept Loop代码)
3.2编写Accept Loop代码让我们实现一个“脚手架服务器”:将TCP套接字绑定到地址并开始接受连接的循环。首先,让我们添加所需的导入样板:use async_std::{ prelude::*, // 1 task, // 2 net::{TcpListener, ToSocketAddrs}...原创 2019-12-26 17:57:49 · 273 阅读 · 0 评论 -
3.教程:使用async-std编写聊天服务(规范和快速开始)
3.教程:编写聊天没有什么比创建聊天服务器更简单的了,对吧?不完全是,聊天服务器让您体验异步编程的所有乐趣:服务器将如何处理同时连接的客户端?它将如何处理他们断开?它将如何分发消息?本教程介绍如何用async-std编写聊天服务器。您还可以在我们的仓库中找到教程。3.1 规范和开始3....原创 2019-12-26 17:35:26 · 340 阅读 · 0 评论 -
2.2 Tasks
2.2 Tasks既然我们知道Futures是什么,我们就要运行它们!在async-std中,tasks模块负责这个的。最简单的方法是使用block_on函数:extern crate async_std;use async_std::{fs::File, io, prelude::*, task};async fn read_file(path: &str) ->...原创 2019-12-26 17:09:59 · 300 阅读 · 0 评论 -
2. async-std中的异步概念
2. async-std中的异步概念Rust中的Futures有一个很不好使用的名声。虽然我们并不这样认为。而且是最简单的并发概念之一,并且有一个很直观的表达。当然,这种看法有充分的理由。Futures有三个基本概念,似乎是让人困惑的来源:延迟计算,异步性和独立执行策略。这些概念并不难,但很多人并不习惯。许多面向细节的实现放大了这种基本混淆。对这些大多数的实现解释也针对高级用户,对初...原创 2019-12-26 16:46:30 · 437 阅读 · 0 评论