ICS proxy lab总结
来源:互联网 发布:java写游戏代码 编辑:程序博客网 时间:2024/04/30 06:34
ICS proxy lab总结
非常遗憾,由于我动手过于匆忙,做的太过于粗放,功能过于简陋,加上不太会调试,加上懒得调试。所以这个服务器写完以后不能访问真实网页。为什么课程每次重头戏的lab,比如电路实验的收音机和ics的代理都会失败呢?我需要好好反思一下:-(
lab要求
这个lab要求实现一个基于线程的并发缓存代理,支持比较简单的功能即可。
lab实现
lab实现无非是给每一个客户端一个独立线程处理,链接,读取请求,从缓存中要请求,如果没有则发送到服务器,读取服务器回应,缓存,并发回。
1.proxy基本框架
基本框架从实现中可以看清楚,比较清晰。虽然弄清楚这个框架本身要费很大力气,但是一旦弄清楚来就不是很大的问题。
2.同步和线程安全
最常见的问题是线程间安全,这个我在细节中会阐述一下,课本里也有很好的解决方案。
3.缓存
缓存最简单的LRU就可以了,而且直接全组相连就好了。但是缓存一个困难的问题在于缓存操作暗含一个读者写着问题(虽然由于测试数据太弱不考虑这个问题隐含不安全也能过…),所以最好确信弄清楚读者写着问题再做,或者确信会使用书中的解答再说。
调试
调试非常困难,最主要困难是不能像其他lab一样简单地printf()就好了,所以调试只能要么用真实的浏览器挂代理,要么用writeup工具,要么输出到文件里自己看。
一些细节
这个lab细节还是很繁琐的,我列举了常见的容易出错的细节
1.缓存错对象
我本来以为缓存对象很好确定,把要Rio_write()的对象缓存一遍就好了,结果不小心多缓存了一个头部,出错。
2.字符串处理错误
很低级的错误,因为调试困难所以很难发现。
而且事实上有些错误我也不知道原因,比如我遇到过read,write读写buf,设定大小为strlen(buf)就出错,设为一个很大的默认值就对了,也不知道为什么。
找到原因了,因为有一个图片所以不能按字符串格式处理,所以正确方法是记录read的大小并write
3.没有避免线程间竞争
这个比较常见,但是看过书里的竞争以后应该不会犯了。
4.缓存读写没有加互斥锁
这个也比较常见,但是看过书里读写者问题就不会错了。
5.空间大小预设不得当出错
这个错误困扰了我好久,没想到测试数据那么大。
- ICS proxy lab总结
- ICS bomb lab总结
- ICS data lab总结
- ICS attack lab总结
- ICS pipeline lab总结
- ICS cache lab总结
- ICS shell lab总结
- ICS malloc lab总结
- ICS lab 总结汇总
- ICS课程中前6个lab的总结
- CSAPP LAB---Proxy lab
- CSAPP: Proxy lab
- 【CSAPP】proxy Lab代理实验
- ICS datalab总结
- ICS bomblab总结
- ICS Malloc Lab: Writing a Dynamic Storage Allocator
- malloc lab总结
- OS lab总结
- bzoj 3730: 震波 (点分树+线段树)
- CSS3颜色渐变练习
- android多选按钮(CheckBox)
- 选夫婿1
- eclipse里启动rabbitmq报错 java.net.SocketException: Connection reset
- ICS proxy lab总结
- Root of the Problem(求a,a^n接近b)
- 交换排序模板
- 如何在java中插入音乐
- 使用 rosmsg时碰到的一个问题
- 英文金曲大赛
- 关于java字节码框架ASM的学习
- 带着崇高与赞美,献给活在计算机里的神灵
- JavaScript基础系列14---面向对象入门