当前位置: 首页 > wzjs >正文

网站客服在线系统电商代运营公司排名

网站客服在线系统,电商代运营公司排名,上海好的高端网站建设,网站平台建设专家意见知识点 tcp 服务多线程处理 实现功能 启动web服务,访问链接获取页面内容。 单线程web服务 TcpListener 使用 TcpListener 开启服务端口 let listener TcpListener::bind("127.0.0.1:7878").unwrap();处理客户端连接: for stream in lis…

知识点

  1. tcp 服务
  2. 多线程处理

实现功能

启动web服务,访问链接获取页面内容。

单线程web服务

TcpListener

使用 TcpListener 开启服务端口

 let listener = TcpListener::bind("127.0.0.1:7878").unwrap();

处理客户端连接:

 for stream in listener.incoming() {println!("Connection established!");}

当浏览器访问 http://127.0.0.1:7878/ 就打印 “Connection established!”, 表示服务启动成功。

处理接口请求

设计2个接口:

  1. 访问 http://127.0.0.1:7878 时,显示index.html 的内容
  2. 访问 http://127.0.0.1:7878/sleep 时,做一个延迟,模拟单线程服务的问题

准备html文件

  1. index.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>Hello!</title></head><body><h1>Hello!</h1><p>Hi from Rust</p></body>
</html>
  1. 404.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>你好!</title></head><body><h1>很抱歉!</h1><p>由于运维删库跑路,我们的数据全部丢失,总监也已经准备跑路,88</p></body>
</html>

实现

  1. 实现请求路由判断
  2. 读取 html 文件内容,并且返回

请求路由判断

通过 BufReader 获取请求数据

   // 解析buffer. 获取请求的数据let buf_reader = BufReader::new(&mut stream);// 读取请求行let http_request: Vec<_> = buf_reader.lines().map(|result| result.unwrap()).take_while(|line| !line.is_empty()).collect();

http_requset 得到数据如下:

["GET / HTTP/1.1","Host: 127.0.0.1:7878","Connection: keep-alive",...]

由此数据可得,只需要判断数组第一个数据就知道请求到哪个路由了。

 let request_line =  if http_request.len( ) > 0 { &http_request[0] } else {""};let (status_line, filename) =  match &request_line[..] {"GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "index.html"),"GET /sleep HTTP/1.1" => {std::thread::sleep(Duration::from_secs(5)); // 添加 5 s 延迟("HTTP/1.1 200 OK", "index.html")}_ => ("HTTP/1.1 404 NOT FOUND", "404.html"),};

处理html文件

通过 文件 处理模块 fs 获取文件的内容。

    let contens = fs::read_to_string(filename).unwrap();

设置返回数据

获取文件的内容之后,把数据返回给客户端, 通过 write_all 方法。

 let content_length = contens.len();// 组合返回数据let response = format!("{}\r\nContent-Length: {}\r\n\r\n{}",status_line,content_length,contens);stream.write_all(response.as_bytes()).unwrap();

效果

当客户端访问 http://127.0.0.1:7878 就会看到 index.html 的内容。如果客户端先访问 http://127.0.0.1:7878/sleep 新起标签页面访问 http://127.0.0.1:7878,如下图。你会发现 http://127.0.0.1:7878 的请求并没有立即显示,而是等待 sleep 请求结束才会显示。相当于接口会存在排队的处理,这对于web服务是个不好的体验。因此需要多线程去处理这些问题。
在这里插入图片描述

处理多线程请求

将每个请求都用 thread 去处理

thread::spawn(|| {handle_connection(stream);});

效果如下,并没有发生排队的问题。这只是简单处理,实际上现在成熟的框架处理单线程的问题。
在这里插入图片描述
源码

http://www.dtcms.com/wzjs/335352.html

相关文章:

  • 网站建设 技术支持下拉词排名
  • 南昌企业网站建设公司网络服务商怎么咨询
  • 有那些专门做财务分析的网站西安sem竞价托管
  • 济南网站建设求职广州seo优化电话
  • 南京直销网站开发做企业网站哪个平台好
  • 十天学会网站建设常见的搜索引擎有哪些
  • 做一个15页的网站怎么做怎么自己做一个网站
  • 杭州建筑网页设计百度网站排名关键词整站优化
  • 网站开发计划书范文百度推广托管公司
  • 网站推广策划百度搜索排名规则
  • 网站架构 seoapp推广方案
  • 做ppt图表的网站关键词异地排名查询
  • 做动漫网站用什么程序广州百度seo公司
  • 建程网app下载一体板seo外包公司费用
  • 提供网站建设教程的网站网络营销案例及分析
  • 武汉网站公司网站营销软文
  • 做政府网站多少钱武汉网络关键词排名
  • 沈阳网站建设设计杭州网站优化服务
  • 织梦手机端网站怎么做seo基础知识考试
  • 做外贸免费发布产品的网站谷歌搜索入口 镜像
  • 人妖和美女做视频网站公司网站建设需要多少钱
  • 优质手机网站建设哪家好网站seo谷歌
  • 网件路由器推荐武汉建站优化厂家
  • 新手做亚马逊要逛哪些网站sem和seo的关系
  • 深圳微信网站制作今日重大事件
  • 做网站刷点击站长工具seo优化系统
  • 重庆政府采购网站官网杭州网络推广有限公司
  • 网站制作价格怎么算百度网站怎么申请注册
  • 网站点击率高志鸿优化网
  • 网站建设公司的名字seo如何去做优化