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

婚庆类网站模板怎样做一个网站平台

婚庆类网站模板,怎样做一个网站平台,做一个免费网站,福建省网站备案用户注销(删除)备案申请表知识点 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.tj-hxxt.cn/news/2261.html

相关文章:

  • 企业微信软件小红书seo是什么
  • 咨询管理公司搜索优化引擎
  • 网上做打字任务的网站上海百度推广公司
  • 机械网站建设多少钱百度seo不正当竞争秒收
  • 安全的南昌网站制作seo代码优化工具
  • 网站建设管理与维护长沙关键词优化新报价
  • 黄石网站建设费用什么是sem和seo
  • 什么网站可以做excel表格百度2022新版下载
  • 全国建设地产网站微信推广平台收费标准
  • 中国建筑集团网广州网站优化运营
  • 页面加收藏从此不迷路给你一个网站怎么优化
  • 返利网站建设服务人民日报今日头条新闻
  • 北京网站制作工作室seo中国官网
  • 外贸网站建设560元app搜索优化
  • 淘宝做的网站优化武汉网站推广排名
  • 深圳做企业网站哪家好网页设计欣赏
  • 东莞免费企业网站建设网站怎么优化关键词排名
  • 建网站规则搜索引擎优化结果
  • wordpress微信机器人windows优化大师使用方法
  • 加盟餐饮的网站建设seo研究中心vip课程
  • 网站前台设计过程只需要手机号的广告
  • 网站开发人员职位汽车营销活动策划方案
  • 建设局网站策划书seo优化专员
  • 重庆宣传片制作成都移动seo
  • crm客户管理系统功能怎么网站排名seo
  • 做游戏破解版的网站搜索推广渠道
  • 电商网站建设注意seo优化包括哪些
  • 动漫设计与制作属于什么类别金华seo全网营销
  • 新品发布会推广词上海网站seo排名优化
  • 山东疫情地区最新名单重庆seo网络推广