Rust

最近学了一阵Rust,这个语言的目的是系统编程,卖点是无GC的内存安全。为了实现这一点,Rust引入了所有权、借用、生命周期的概念。可以在编译器检查出可能的内存问题,如野指针、局部变量指针等等。不过这也对写程序造成了一定的困扰,对于move、borrow等如果理解的不是很到位,那必然要和编译器做长期的斗争。

Web服务器

骨架

Web服务器,实际上就是对socket的数据流的处理,监听端口,并对每个新的连接,开启一个新的线程进行处理。代码的骨架基本上是

matchTcpListener::bind("127.0.0.1",9999)){Ok(listener)=>{forstreaminlistener.incoming(){matchstream{Err(e)=>{// error, log, ignore},Ok(s)=>{thread::spawn(move||handle_client(s));},}}drop(listener);},Err(e)=>{// error, log, ignore}}

其中thread::spawn(move || handle_client(s)),开启新的线程,参数是一个闭包,move关键字表示将闭包所在环境的标量的所有权强行交给闭包。之后重点是handle_client中对于TcpStream的处理,也就是解析请求,并构造响应。读取请求。

解析请求

一个HTTP的请求,格式是这样的

METHOD URI VERSION

Host: xxx

other-header: xxx

body

这个服务器目前只能处理GET和HEAD请求,并且只能处理静态文件,所有很多东西并没有做。比如querystring的解析、请求体的解析等等。各种header也只是解析,并没有真的使用。之后会慢慢完善,函数重点是

fn parse(stream: &mutTcpStream)-> Option{letmuts=Vec::new();Self::get_request(stream,&muts);matchString::from_utf8(s){Ok(s)=>{// parse request line and header},Err(_)=>None,}}

如果解析失败,返回一个None,这是Request结构的一个静态方法。解析成功则打印日志,并根据请求构造响应。

构造响应

响应的的格式为

VERSION CODE PHRASE

header: xxx

other-header: xxx

body

由于只能处理静态请求,实际上这里就是读取文件并.对于HEAD请求,只计算长度,没有响应体部分。

目前的相应的结构为

struct Response{head: String,body: String

}

通过code、mime、content等拼接字符串,得到响应头部以及响应体。最后通过TcpStream发送出去。

至此,这个web服务器就算是完成了。

最后

Rust这个语言还是非常不熟,对于lifetime的理解也太行,所以通篇没有用到lifetime标记,遇到字符串都是用的String。另外,Rust目前并没有高性能的非阻塞IO以及异步IO,有一些库在做这方面的尝试。不过对这方面不熟,没有多做尝试。

rust自创服务器_用Rust写了一个简单的Web服务器相关推荐

  1. ios php mysql实例_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  2. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  3. 用python写一个简单的web服务器

    人生苦短,我用python 简洁高效,这才是理想的语言啊 分享一点python的学习经验-----如何用python写一个简单的web服务器 首先,我们需要简单地了解一下网络通信协议,这里用白话介绍一 ...

  4. 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  5. web服务器python_一个简单的web服务器(python)

    今天用python写一个简单的web服务器代码网上都有只是为了方便大家学习做了一个简单的教程 第一首先我们来一张架构以及运行过程的流程图 本文学习仅供参考,需要更多资料可以加群:496257369 简 ...

  6. 我的Go语言学习之旅八:创建一个简单的WEB服务器

    因为一直在做WEB程序,所以更关注WEB界的发展,这里就用GO做了一个简单的WEB服务器,直接看例子吧 package main import ( "fmt" "net/ ...

  7. java实现web服务器_Java 实现一个简单的web服务器

    在日常的开发中,我们用过很多开源的web服务器,例如tomcat.apache等等.现在我们自己实现一个简单的web服务器,基本的功能就是用户点击要访问的资源,服务器将资源发送到客户端的浏览器.web ...

  8. 【计算机网络作业】Java UDP聊天 和 Socket编写一个简单的Web服务器

    1-1 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序.具体如下: (1).Tom和Jerry聊天的双方都应该具有发送端和接收端: (2).利用DatagramSocket与Da ...

  9. c语言服务器制作,C语言写的简易实用的web服务器

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Apache在码农界是比较知名的,它也是目前最接地气.使用最广泛的Web服务器 ...

最新文章

  1. python socket recvfrom_Python socket学习笔记(一)
  2. 成大事必备9种能力 9种手段 9种心态(图)
  3. 用神经网络例子讲解TF运行方式~人工智能入门编程例子讲解
  4. 进程间通信(未完成)
  5. CSDN九年的博客时光
  6. Linux静态库与动态库详解
  7. 千万不能返回局部变量的引用
  8. 成功解决gyp verb ensuring that file exists: C:\Python27\python.exe gyp ERR! configure error gyp ERR! sta
  9. SQL查询分析器单文件绿色版
  10. 微信网页版协议今天关闭,新的微信协议 HOOK技术
  11. GEE开发之Landsat_SR计算地表温度(不推荐)
  12. 首都师范 博弈论 5 2 1帕累托最优
  13. html语言文本框怎么做,HTML文本框参考样式
  14. 和平精英显示与服务器断开连接,和平精英网络异常怎么办 网络异常解决方法...
  15. 写好的java项目如何部署在公司服务器上,并能让局域网内其他同事访问到,以及遇到的坑!
  16. 阿里云服务器被攻击了
  17. 线性规划以及二次规划
  18. Matplotlib_Study01
  19. windows服务器署站点,Windows Server配置学习心得-web服务器的搭建和部署,配置一个BLOG站点...
  20. 学习廖雪峰Git入门教程--总结

热门文章

  1. coreldraw怎么打印荣誉证书_CorelDraw如何批量打印证书
  2. System.InvalidOperationException: Response Content-Length mismatch: too few bytes written (0 of 1628
  3. 内网渗透----Windows下信息收集
  4. 小米手机开发者选项打开usb安装需要SIM卡解决办法
  5. HTML+css简单实现手机邮箱导航网页
  6. Linux 压缩、解压、打包操作
  7. 云谦:谈谈前端框架的趋势与实践
  8. html实现微信公众号,H5在微信公众号的下拉刷新实现
  9. 北鲲云联合珠海中科先进技术研究院推出代算服务
  10. zabbix的php最低版本,ZABBIX企业监控实践(3):升级与配置PHP