摘要: 原来我搞这么久,程序是跑起来了,但是真的不知道server段用了异步回调操作之后,整个流程到底是怎样的,前天一步步地调了之后,才发现这些过程自己完全不知道…所以没办法了,现在不搞懂的话之后代码拓展了就更不可收拾了,利用这个周末好好恶补下吧,今晚搞不通就不睡觉了,哎!先统一放几个,我认为对于我所困惑的问题解释得比较到点的博文链接吧,谢谢这些朋友:http://blog.csdn.net/henreash/article/details/7469707http://blog.csdn.net/zhuky/article/details/5364685http://cpp.ezbty.org/con 阅读全文
posted @ 2013-12-01 19:42 Allen_Tung 阅读(1324) 评论(0) 推荐(0) 编辑
摘要: 构思了下,觉得到时写的时候用上多线程什么的,肯定是不能避免的, 而c++实现多线程又是特别考验人的和折磨人的,所以就先开个小程序把有可能出现的问题都搞搞吧第一个:超级烦的LPVOID的,其实我觉得这种明明方式还真的挺丑的,直译的话是“老婆空”么?哎…怪不得程序员都那么屌丝。好吧,其实是这样的,因为这个东西呢,是个可以指向任意类型的指针,好像是为了平台的可移植性而搞的吧,反正在winapi里面(当然也就包括了要用到的线程的接口和很有可能也要用到的winsock这些),这个东西是出现很多的,而可想而知我自己的里面,经常会有像char*啊string之类这些东西的出现,所以转换就成了一个问题。好吧, 阅读全文
posted @ 2013-11-29 09:31 Allen_Tung 阅读(766) 评论(0) 推荐(0) 编辑
摘要: 在看第二个例程,额,第一个例程也花得够多时间的,不过我觉得还是值得,毕竟把基本的框架都搭建了起来,就差个多线程了,还自己写了很多补充的方法,定义了我要用到的请问的报文格式,嗯嗯,今天杭州天气不错的。这个server2的例程的话,其实改动不大,它的标题是one io_service per cpu,其实大部分的源文件还是跟server1的一样的,主要就是用一个叫 io_service_pool的类代替了原本的connection_manager,这个类就是用来管理一堆Io_service的,主要核心的变量我暂时一眼看出应该就是这三个吧:private: typedef boost::share. 阅读全文
posted @ 2013-11-28 11:06 Allen_Tung 阅读(1218) 评论(0) 推荐(0) 编辑
摘要: 好吧,总算是测试通过了自己写的挫逼client的post请求以及server端接受请求之后然后处理的流程了,哎,不容易中间调了几个傻逼的bug,其实也就是自己对函数的功能没记牢或者是写的时候犯晕了,记录下,强调下:第一:find_first_of 和 find是彻底不一样的…刚开始的时候用了前者,其实前者就是在你给的一堆字符当中它找到了出现的第一个字符就ok了,而后者就是可以接受查询字符串的位置的。第二:记得substr这个函数,第二个参数的意思是,这个子串的长度!!!而不是子串结束字符的下标!所以一边要用(begin_index, end_index - begin_index)这种表示方法 阅读全文
posted @ 2013-11-27 21:56 Allen_Tung 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 第一:现在自己在request parser里面新实现一个解析请求的函数,原本的那个函数逐个字符地来字符来读我真心不觉得有多高效,虽然我也只是用字符串的方式来分割,然后再赋值给request的各个变量。这里才知道…c++ 在分割字符串方面这么挫的…额,没办法了,就自己用strtok封装一个方法吧,返回一个vector。vector split(string& str,const char* c){ char *cstr, *p; vector res; cstr = new char[str.size()+1]; strcpy(cstr,str.c_str()); ... 阅读全文
posted @ 2013-11-27 20:14 Allen_Tung 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 第一:好久不见关键字explicit,额,其实我自己以前也没怎么用,这里就引用个链接来权当备忘吧:http://developer.51cto.com/art/201002/183398.htm第二:为了调试的观察方便,我在每一个地方基本都加了输出的语句,包括构造函数,然后发现很神奇的一样东西就是在Connection的类在创建new一个指针的时候,request_parser的构造函数里面的那句文本会输出,而其他的不会,或许是因为在connection的构造函数中是这样的: connection::connection(boost::asio::io_service& io_s... 阅读全文
posted @ 2013-11-27 09:44 Allen_Tung 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 第一:首先几乎每个类都以private方式继承了boost::noncopyable,开始不知道是什么好玩的东西,查了下,原来是这样私有地继承就可以实现单例了,随便找了位大神的博客来看看,这里吧:http://blog.csdn.net/huang_xw/article/details/8248960第二:connection_management这个类还是比较简单的,无非就是拿来stop,start那些connection,然后还有一个set来装所有的connections第三:connection这个类,也没有太特别的地方,主要就是定义了一个以connection为模板参数的智能指针,也是 阅读全文
posted @ 2013-11-22 23:11 Allen_Tung 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 第一:在慢慢学boost的asio库,发现用io_service的时候,argv【1】一般就是默认是localhost啦,当然分布式的时候就是ip了,额,端口号不能用8080,记住。第二:那个blocking_tcp_echo_client对于async_tcp_echo_server也是可以用的,没有区别第三:说说从async_http_client中总结的一些东西,很杂乱噢:首先这个client是异步的,我在每一个函数里面都设了断点之后,貌似发现io_service。run到底是怎么运作了,下面 boost::asio::io_service io_service; ... 阅读全文
posted @ 2013-11-20 10:55 Allen_Tung 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 没办法,因为太水,勤能补拙吧,点点滴滴来学吧,asio库的东西:第一:关于timer的一点小知识,void print(const boost::system::error_code& err_code){ coutexpires_at(t->expires_at() + boost::posix_time::seconds(2)); t->async_wait(boost::bind(print, boost::asio::placeholders::error, t, count)); }}int main(){ int forcin=0; time_... 阅读全文
posted @ 2013-11-17 15:08 Allen_Tung 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 好吧,中间又拖了几天了,对于开发环境的框架和库一直迟迟定不下来,在担心开始选不好的话,以后就蛋疼了。选轻量级的库吧,又觉得可能我在开发伊始是觉得很容易上手了,但若以后我这个平台要持续地拓展呢?比如libevent这种轻量型的库。选太重量的吧,比如ACE库,又担心根本连个头都开不起来,因为看到很多人说要用起这个大名鼎鼎的框架,就要非常熟悉它的体系,它抽象了一层有一层,像个洋葱一样,如果我愿意一层一层一层地剥开它的心,最后我会鼻酸我会流泪的。所以吧,最后还是选用boost::asio来搞吧,看了很多博客很多资料的对比了,libevent和libev支持unix不错,但是windows的话不太行,a 阅读全文
posted @ 2013-11-15 16:25 Allen_Tung 阅读(326) 评论(0) 推荐(0) 编辑