4214|12

5264

帖子

239

TA的资源

管理员

楼主
 

《Rust实战》书友互动第八集:网络,这个很熟悉... [复制链接]

 

主题词大伙都熟悉,不晓得内容会如何,看到内容目录里还有"创建一个微型的角色扮演游戏:rpg项目”,不知道是何物,期待大伙网络主题的问答接龙啦。

 

演绎时间:即日起至6月10日
脚本限定:《Rust实战》第八章 
 
角色分配:
提问角色(4位)和解题角色(4位)、总结角色(2位),下方跟帖第一位书友嘉宾是提问角色,第二个是解题角色,解答第一个提问,解答完后,解题角色可以继续提问,也可以不提问,结束一次问答循环。后面参与继续新起问答接龙即可,最后2位是章节总结角色,以文字或者思维导图的形式,对本章进行总结,至此一次互动结束。注意:提问角色发布的问题,对解题者理解、学习本章Rust内容有切实意义;提问角色所发布的问题不可重复。
 

活动交流群

论坛有开设嵌入式交流群,欢迎感兴趣的小伙伴,微信添加“helloeeworld”为好友,对话:加入嵌入式交流群,入群交流。

扫码,对话:加入嵌入式交流群。

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

最新回复

使用异步运行时:Rust 的异步编程通常依赖于异步运行时,如 tokio 或 async-std。这些运行时提供了执行异步任务和处理 I/O 操作的基础设施。 异步 I/O:使用异步 I/O 库,如 tokio::net 或 async-std::net,来创建和处理网络连接。这些库允许你以非阻塞的方式读写数据。 使用 Future 和 async/await:Rust 的 Future trait 和 async/await 语法使得编写异步代码变得简单和直观。Future 代表了一个可能还没有完成的计算,而 async 函数返回一个 Future。 连接池:为了高效地管理大量连接,可以使用连接池来复用连接,减少创建和销毁连接的开销。 背压(Backpressure):在处理大量并发请求时,背压是一种重要的机制,用于防止生产者发送数据的速度超过消费者处理的速度。 错误处理:确保你的异步代码能够妥善处理错误,例如使用 Result 类型和 ? 操作符来传播错误。 超时和重试策略:设置合理的超时时间,并根据需要实现重试逻辑,以确保数据的可靠传输。 使用消息队列:在处理大量并发请求时,可以使用消息队列来缓冲请求,然后异步地处理它们。 并发控制:使用 Rust 的并发原语,如 Mutex、RwLock 或 Arc,来安全地在多个线程或任务之间共享数据。 性能监控和优化:使用性能监控工具来分析你的异步代码,并根据需要进行优化。 使用第三方库:利用 Rust 生态系统中的第三方库,如 hyper 用于 HTTP 客户端和服务端的开发,serde 用于序列化和反序列化数据等。   详情 回复 发表于 2024-6-10 18:33
点赞 关注

回复
举报

7091

帖子

11

TA的资源

版主

沙发
 

Rust的错误处理是安全而精细的,但是它也带了一些挑战。当一个函数包含了两个来自上游包的result类型时,?操作符就不再起作了,因为它只能理解一种类型。请问Rust如何应对这一挑战及策略?

点评

在Rust中,当一个函数包含了两个不同的Result类型时,可以使用match语句来处理这种情况。match语句可以根据不同的Result类型执行不同的操作。 通过使用match语句,我们可以根据不同的Result类型执行不同的操作,  详情 回复 发表于 2024-6-4 13:33
 
 

回复

183

帖子

12

TA的资源

一粒金砂(高级)

板凳
 

问个开放性问题吧——你觉得UDP和TCP哪个更好用?

点评

UDP响应快,但是因为缺少握手,在多径的情况往往会出现乱序——在上层纠正乱序很麻烦。 TCP协议非常方便,但高速方案上不适合——比如组播  详情 回复 发表于 2024-6-4 14:14
答:我觉得UDP比较简单一些,通信逻辑来说,只要把数据塞到缓冲区里,发完就不用管了,如果需要心跳可以定时发送,优势就是发送快,缺点就是数据如果丢了就是丢了。   TCP吧,我用的不是很多,但其优势就  详情 回复 发表于 2024-6-4 13:31
 
 
 

回复

294

帖子

0

TA的资源

一粒金砂(高级)

4
 
nemon 发表于 2024-6-4 12:24 问个开放性问题吧——你觉得UDP和TCP哪个更好用?

答:我觉得UDP比较简单一些,通信逻辑来说,只要把数据塞到缓冲区里,发完就不用管了,如果需要心跳可以定时发送,优势就是发送快,缺点就是数据如果丢了就是丢了。

 

TCP吧,我用的不是很多,但其优势就是安全,而且数据不容易丢。

总结来说:好用还是UDP好用,但是具体情况具体项目要具体分析

 
 
 

回复

294

帖子

0

TA的资源

一粒金砂(高级)

5
 
lugl4313820 发表于 2024-6-4 11:42 Rust的错误处理是安全而精细的,但是它也带了一些挑战。当一个函数包含了两个来自上游包的result类型时,? ...

在Rust中,当一个函数包含了两个不同的Result类型时,可以使用match语句来处理这种情况。match语句可以根据不同的Result类型执行不同的操作。

通过使用match语句,我们可以根据不同的Result类型执行不同的操作,从而处理包含多个不同Result类型的函数。

 
 
 

回复

402

帖子

9

TA的资源

纯净的硅(初级)

6
 
nemon 发表于 2024-6-4 12:24 问个开放性问题吧——你觉得UDP和TCP哪个更好用?

UDP响应快,但是因为缺少握手,在多径的情况往往会出现乱序——在上层纠正乱序很麻烦。

TCP协议非常方便,但高速方案上不适合——比如组播

 
 
 

回复

4947

帖子

12

TA的资源

版主

7
 

提问:

说起网络来,自然少不了模拟浏览器,下面这段request关键是啥,有人知道吗?尤其是反爬虫时候去识别。

Request: [
    "GET / HTTP/1.1",
    "Host: 127.0.0.1:7878",
    "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0",
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language: en-US,en;q=0.5",
    "Accept-Encoding: gzip, deflate, br",
    "DNT: 1",
    "Connection: keep-alive",
    "Upgrade-Insecure-Requests: 1",
    "Sec-Fetch-Dest: document",
    "Sec-Fetch-Mode: navigate",
    "Sec-Fetch-Site: none",
    "Sec-Fetch-User: ?1",
    "Cache-Control: max-age=0",
]

 

点评

我觉得,最简单的是检查User-Agent,但是做爬虫的也知道啊,所以既要看某一访问的头是否正常、真实,还得看一系列访问的行为模式和细节,但这又带来了更大的资源占用。  详情 回复 发表于 2024-6-5 19:15
 
 
 

回复

183

帖子

12

TA的资源

一粒金砂(高级)

8
 
吾妻思萌 发表于 2024-6-5 10:01 提问: 说起网络来,自然少不了模拟浏览器,下面这段request关键是啥,有人知道吗?尤其是反爬虫时候去 ...

我觉得,最简单的是检查User-Agent,但是做爬虫的也知道啊,所以既要看某一访问的头是否正常、真实,还得看一系列访问的行为模式和细节,但这又带来了更大的资源占用。

 
 
 

回复

504

帖子

4

TA的资源

纯净的硅(高级)

9
 

关于本章小结的一点问题

1.网络是复杂的。诸如OSI这样的标准模型,只有部分是准确的。

这一句话怎么读都怎么不理解,不知道是翻译问题还是什么,OSI标准模型不能说它只有部分是准确的,可以说实现时可能并不会实现所有的7层模型,可能会简化,但是这不是意味着其只有部分是准确的。

2.为了在UDP中实现双向通信,通信的双方都必须能够即被当作客户端又被当作服务器。

个人觉得这个描述也有点复杂没必要,UDP可以认为就是一个RAW数据通道,所以没有什么服务器客户端的概念,双方是对等的通讯双方即可,就好比串口通讯双方一样。

 
 
 

回复

4947

帖子

12

TA的资源

版主

10
 
这几天在看rust做web响应,的确考虑到各种情况,严格匹配确实好啊。多线程还不会,需要再看看。那么多线程最难的地方在哪呢?同步吗?
 
 
 

回复

46

帖子

1

TA的资源

一粒金砂(中级)

11
 

在 Rust 中,如何使用异步编程来高效地处理大量并发的网络连接,同时又可以确保数据的可靠传输和低延迟响应呢

点评

使用异步运行时:Rust 的异步编程通常依赖于异步运行时,如 tokio 或 async-std。这些运行时提供了执行异步任务和处理 I/O 操作的基础设施。 异步 I/O:使用异步 I/O 库,如 tokio::net 或 async-std:  详情 回复 发表于 2024-6-10 18:33
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

12
 

网络协议的字节数据有特殊要求,那么在Rust网络编程中,有哪些最佳实践

 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

13
 
ccccccc@ 发表于 2024-6-7 15:41 在 Rust 中,如何使用异步编程来高效地处理大量并发的网络连接,同时又可以确保数据的可靠传输和低延迟响应 ...
  1. 使用异步运行时:Rust 的异步编程通常依赖于异步运行时,如 tokio 或 async-std。这些运行时提供了执行异步任务和处理 I/O 操作的基础设施。

  2. 异步 I/O:使用异步 I/O 库,如 tokio::net 或 async-std::net,来创建和处理网络连接。这些库允许你以非阻塞的方式读写数据。

  3. 使用 Future 和 async/await:Rust 的 Future trait 和 async/await 语法使得编写异步代码变得简单和直观。Future 代表了一个可能还没有完成的计算,而 async 函数返回一个 Future。

  4. 连接池:为了高效地管理大量连接,可以使用连接池来复用连接,减少创建和销毁连接的开销。

  5. 背压(Backpressure):在处理大量并发请求时,背压是一种重要的机制,用于防止生产者发送数据的速度超过消费者处理的速度。

  6. 错误处理:确保你的异步代码能够妥善处理错误,例如使用 Result 类型和 ? 操作符来传播错误。

  7. 超时和重试策略:设置合理的超时时间,并根据需要实现重试逻辑,以确保数据的可靠传输。

  8. 使用消息队列:在处理大量并发请求时,可以使用消息队列来缓冲请求,然后异步地处理它们。

  9. 并发控制:使用 Rust 的并发原语,如 Mutex、RwLock 或 Arc,来安全地在多个线程或任务之间共享数据。

  10. 性能监控和优化:使用性能监控工具来分析你的异步代码,并根据需要进行优化。

  11. 使用第三方库:利用 Rust 生态系统中的第三方库,如 hyper 用于 HTTP 客户端和服务端的开发,serde 用于序列化和反序列化数据等。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表