开始搞实验的杂谈(二)-------主要关于第一个比较完整的boost支撑的client和单线程server
2013-11-22 23:11
260 查看
第一:首先几乎每个类都以private方式继承了boost::noncopyable,开始不知道是什么好玩的东西,查了下,原来是这样私有地继承就可以实现单例了,随便找了位大神的博客来看看,这里吧:http://blog.csdn.net/huang_xw/article/details/8248960
第二:connection_management这个类还是比较简单的,无非就是拿来stop,start那些connection,然后还有一个set来装所有的connections
第三:connection这个类,也没有太特别的地方,主要就是定义了一个以connection为模板参数的智能指针,也是集成noncopyable,然后connection拥有的变量有:socket(这个好理解,每一次连接就负责搞一个socket),一个connection_management的引用(额,好吧,这个就是管理它的那个对象的引用,这么设计好像有点不适我的风格…),一个request_handler的引用(这个connection所使用的用来处理请求的对象的引用),类似的必须有这些配套:request_parser,request,reply,还有一个boost::array<char,8192>buffer,当然是用来处理的时候来放的东西的了。
第四:request_handler也没有什么特别的,有个url_decode的方法吧,来看下url是否合法的。就这样了
第五:string原来有一个find(string)的函数,如果在字符串里面没有找到那个string,就会返回:string::nops
第六:在搞requst-handler这个类的时候碰到了文件流的操作,额,原来之前对文件的操作基本上是java就非常的熟,python也还可以(主要还是python的操作太傻瓜了),然后c++的还真没有认真弄过,所以有点忘了,当然这里用的就是fstream,用的时候就添加个<fstream.h>,这位朋友的博文还是讲的不错的,连我多年么碰到的这个用法也写上了,谢谢:/article/4381630.html
ifstream is(full_path.c_str(), ios::in | ios::binary);
第七:这里的这个小段代码就是从一个文件流中不断地读出数据,然后写入那个reply的content里面的过程,gcount这个函数是用来获取每一次读了多少个字节数的
对了,其实之前也弄过,不过也刚好在这个朋友的博客上看到了i以前获取文件的总字节数的一个小小的技巧,指针移到文件末尾然后用现在指针距离文件的头的偏移数量来获取文件的length,完事之后再把指针设为文件头:
第八:这里留个位置给那个url_decode的函数,因为暂时还不是很懂…
好吧,另外再开一篇!
第二:connection_management这个类还是比较简单的,无非就是拿来stop,start那些connection,然后还有一个set来装所有的connections
第三:connection这个类,也没有太特别的地方,主要就是定义了一个以connection为模板参数的智能指针,也是集成noncopyable,然后connection拥有的变量有:socket(这个好理解,每一次连接就负责搞一个socket),一个connection_management的引用(额,好吧,这个就是管理它的那个对象的引用,这么设计好像有点不适我的风格…),一个request_handler的引用(这个connection所使用的用来处理请求的对象的引用),类似的必须有这些配套:request_parser,request,reply,还有一个boost::array<char,8192>buffer,当然是用来处理的时候来放的东西的了。
第四:request_handler也没有什么特别的,有个url_decode的方法吧,来看下url是否合法的。就这样了
第五:string原来有一个find(string)的函数,如果在字符串里面没有找到那个string,就会返回:string::nops
第六:在搞requst-handler这个类的时候碰到了文件流的操作,额,原来之前对文件的操作基本上是java就非常的熟,python也还可以(主要还是python的操作太傻瓜了),然后c++的还真没有认真弄过,所以有点忘了,当然这里用的就是fstream,用的时候就添加个<fstream.h>,这位朋友的博文还是讲的不错的,连我多年么碰到的这个用法也写上了,谢谢:/article/4381630.html
ifstream is(full_path.c_str(), ios::in | ios::binary);
第七:这里的这个小段代码就是从一个文件流中不断地读出数据,然后写入那个reply的content里面的过程,gcount这个函数是用来获取每一次读了多少个字节数的
while (is.read(buf, sizeof(buf)).gcount() > 0) { rep.content.append(buf, is.gcount()); }
对了,其实之前也弄过,不过也刚好在这个朋友的博客上看到了i以前获取文件的总字节数的一个小小的技巧,指针移到文件末尾然后用现在指针距离文件的头的偏移数量来获取文件的length,完事之后再把指针设为文件头:
is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg);
第八:这里留个位置给那个url_decode的函数,因为暂时还不是很懂…
好吧,另外再开一篇!
相关文章推荐
- 开始搞实验的杂谈(五)-------主要关于第一个比较完整的boost支撑的client和单线程server
- 开始搞实验的杂谈(三)-------主要关于第一个比较完整的boost支撑的client和单线程server
- 开始搞实验的杂谈(四)-------主要关于第一个比较完整的boost支撑的client和单线程server
- 稍微进阶点的搞实验中的杂谈(一)—— 主要关于boost asio例程2,多个io_service的server,例程3,多个线程一个io_service
- 开始搞实验的杂谈(二)-------主要关于http_async_client
- 第一个完整的工程(一个简单的双路灯控实验)
- 开始新的征程~~~~从第一个python 的机器学习实验开始~~~~~SVM实验
- Boost.Asio和ACE之间关于Socket编程的比较
- [关于OPC的研究2]配置 WinTech的server和client程序
- 关于commons-httpClient使用,比较全面
- Qt线程基础(这个比较完整)
- Boost.Asio和ACE之间关于Socket编程的比较
- 关于apache和tomcat集群,线程是否占用实验
- Boost.Asio和ACE之间关于Socket编程的比较
- Boost.Asio和ACE之间关于Socket编程的比较
- Dom:关于clientWidth、offsetWidth、clientHeight、offsetHeight的测试比较
- Boost.Asio和ACE之间关于Socket编程的比较
- 【兴趣爱好】之:Boost.Asio和ACE之间关于Socket编程的比较
- 关于X Server/Client和RDP的畅想
- 关于不正常地定义参数对象。提供了不一致或不完整的信息或者MySQL server has gone away的问题总结