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

做qq空间的网站百度seo关键词点击软件

做qq空间的网站,百度seo关键词点击软件,做美股的数据网站,vs2013 网站建设知识点 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.yayakq.cn/news/644337/

相关文章:

  • 佛山微商网站建设哈尔滨网络公司代理商
  • 网站系统评测要怎么做呢wordpress 的图片保存在哪
  • 网站开发名列前茅江都区城乡建设局网站马局
  • 免费域名注册哪个网站好域名备案未及时注销处罚
  • 网站开发 视频播放器wordpress从前台登录
  • 孙俪做的网站广告中国新闻社山西分社
  • 网站做百度小程序改造的好处wordpress 评论提醒邮件插件
  • 如何收集网站建设资料简单设置网站首页
  • 惠州网站建设开发团队苏州高端网站开发
  • wordpress安装2个网站吗西安百度关键词推广
  • 甘肃住房和城乡建设厅网站首页php能区别电脑网站和手机网站吗怎么嵌入到phpcms
  • 什么公司需要网站建设应该如何使用网络营销策略
  • 苏州免费自助建站网站建设搜索引擎快速排名推广
  • 网站建设要学哪些软件有哪些方面安卓软件开发公司收入
  • 官方网站搭建要多少钱aspx网站做app
  • php网站开发专业介绍内部网站建设软件下载
  • 外贸网站搜索引擎优化方法erp软件有哪些品牌
  • 网站建设制作有那些郑州制作网站推荐
  • 怎么知道网站哪家公司做的徽石网站建设
  • 文交所网站建设方案陕西汽车网站建设
  • 如何介绍设计的网站模板推广链接让别人点击
  • 企业的网站建设制作平台wordpress页面缓慢
  • 网站建设云技术公司推荐学校网站代码模板
  • dw做的网站上传昆明餐饮网站建设
  • 坪山附近公司做网站建设哪家效益快兰州网站开发公司
  • 怎么做网站图片链接做网站要遵守的基本原则
  • 做php网站用什么软件广州软件开发工资怎么样
  • 中国做跨境电商出口的网站嵌入式软件开发工程师简历
  • ps网站设计概述高唐建筑公司网站
  • 织梦网站入侵软件开发服务平台