目标完成情况
没有定目标。
学习回顾
1. 给tiny服务器做注释
今天主要将书上的tiny服务器进行了回顾,尽量做了一些注释,感觉有很多东西都涉及内核缓冲区和用户缓冲区的数据传递,对指针、字符串的C语言风格的处理,还有缓冲区大小、异常处理等等。代码显得非常难受,基本看完就忘了。
tiny服务器的总体流程如下:
- 创建套接字,监听,建立连接,拿到连接描述符。
- 对着连接描述符进行读写。读就是接收信息,写就是发送信息。写什么东西,要根据读的内容来决定,所以读完之后要解析,根据http请求的格式来解析,判断客户端想要什么,是静态还是动态,静态的话,是哪个文件,动态的话,是要执行哪个程序。这中间还涉及到参数如何传递,结果如何写到套接字的问题。前者是通过?和环境变量,后者是通过输出重定位。
- 最后要关闭套接字。
这中间有很多的异常处理。
2. 部署tiny服务器
花了99元买了个腾讯云服务器。最便宜的,一年。然后用在线的shell通过ssh连接上远程服务器,在上面尝试部署csapp.h,csapp.c, 和tiny服务器的一些代码,编译、连接,运行。然后通过服务器ip进行访问,是可以完成基本的demo功能。但是也遇到了一些疑惑:
- 如何将一个很丰富的html文件放入服务器目录中,然后可以被请求?由于整个服务器主机是没有界面的,我不知道如何得到一个丰富的html文件,似乎可以通过ftp来实现,但是我没有很明确的思路。(如果有界面的话,我可以打开浏览器,然后保存一个web页面)。
- 由于服务器主机本身是一直开着的,我就想让这个开启着的服务器一直运行我的tiny程序应该不过分吧?但是我现在的情况是: 只要我断开ssh连接,我的tiny服务器就不能访问了。 我尝试了nohup方法和screen方法,都没有成功,中间还遇到了日志文件撑爆磁盘的问题。
- tiny服务器和那些比较成熟的web服务器的区别在哪里?是后台逻辑吗?例如nginx?是不是说,正常开发网站,都是用的成熟的服务器,不用考虑socket通信问题?web服务器和http服务器的区别在哪里?
以上三个问题暂时都没有很好的解释,我这个人学习的一个缺点就是,问题总是比理解多,我善于提出问题,却不善于结合已有的知识来解释问题,这导致我学东西不是很快,理解能力不够强,而且很容易钻进牛角尖,在一个问题上耽误很久。
暂且保留这3个问题吧。等看到unp的时候,应该会有更好的解释。等搞懂了,分别写一篇博客来整理!相信一定会非常刺激和高兴!
明日目标
- 牛客2道题
- 第12章,并发编程,看一半。
- C++ primer看一点。
要专注。