代码改变世界

随笔档案-2012年06月

Cowboy 源码分析(二十四)

2012-06-29 08:40 by rhinovirus, 1483 阅读, 收藏,
摘要: 大家好,调整下作息时间,以后尽量不熬夜写文章了,改成早上早起写。试试这样的作息习惯吧,不是有句话说吗,早睡早起精神好,其实主要是熬夜确实对身体不太好。好了,回归正题,上一篇,我们分析到 cowboy_http_protocol:terminate_request/3 函数第一行,今天我们来看下一行,也就是:next_request(Req, State, HandlerRes). cowboy_http_protocol:next_request/3函数代码如下:-spec next_request(#http_req{}, #state{}, any()) -> ok.next_req 阅读全文

Cowboy 源码分析(二十三)

2012-06-27 01:09 by rhinovirus, 1090 阅读, 收藏,
摘要: 大家好,上一篇在文章的最后我们提到cowboy_http_protocol:terminate_request/3 函数,今天我们继续往下看:-spec terminate_request(any(), #http_req{}, #state{}) -> ok.terminate_request(HandlerState, Req, State) -> HandlerRes = handler_terminate(HandlerState, Req, State), next_request(Req, State, HandlerRes). 这个函数就两行代码: 首先调用c... 阅读全文

Cowboy 源码分析(二十二)

2012-06-26 00:01 by rhinovirus, 1896 阅读, 收藏,
摘要: 今天又是早早下班,买了排骨,莲藕,现在正压着排骨莲藕汤,从小就学做饭,发现其实做饭也蛮多乐趣的。等这篇文章发布以后,我应该已经吃完很久了,哈哈。回到主题,上一篇,我们cowboy_http_protocol:dispatch/2 函数,今天我们来看cowboy_http_protocol:handler_init/2 函数:-spec handler_init(#http_req{}, #state{}) -> ok.handler_init(Req, State=#state{transport=Transport, handler={Handler, Opts}}) ->... 阅读全文

Cowboy 源码分析(二十一)

2012-06-25 00:39 by rhinovirus, 1784 阅读, 收藏,
摘要: 大家好,今天继续跟大家分享Cowboy的源码分析,这一篇,我们看下cowboy_http_protocol:onrequest/2函数,完整代码如下:%% Call the global onrequest callback. The callback can send a reply,%% in which case we consider the request handled and move on to the next%% one. Note that since we haven't dispatched yet, we don't know the%% handl 阅读全文

Go基础语法整理(一)

2012-06-24 15:10 by rhinovirus, 12386 阅读, 收藏,
摘要: 时间过的好快,转眼端午已经过去两天半了,今天在家里,静下心,看看书,写写文章。这一段时间,我除了看Cowboy源码,抽空看了下Go的基本语法,当然就是看之前在Ubuntu下使用Sublime Text 2搭建Go开发环境 这篇文章中跟大家推荐的《学习Go语言》0.4 中文版,今天抽空整理下基础知识点,毕竟看跟实践带来的效果是不同的。 变量、类型和保留字 Go在语法上有着类C的感觉,一般情况下,你不需要使用分号,除非你将两个(或更多)语句放在一行书写。 Go和ActionScript3一样,变量的类型在变量名的后面,例如: C#是: int a; 而Go则是 var a int; 如... 阅读全文

Cowboy 源码分析(二十)

2012-06-21 00:13 by rhinovirus, 1473 阅读, 收藏,
摘要: 大家好,这几天在忙游戏的端午节活动,在这里也提前跟大家说一声端午节快乐,如果你们的公司遵守国家规定,应该是放假三天,那么,大家想吃粽子吃粽子,想划龙舟划龙舟(不知道有没地方),不知道大家老家的粽子都是什么味道,映像最深刻的是小时候,端午节会有新的衣服穿,但是换之前需要用艾叶洗澡,好像我在北京都很少见过,还有就是老家的肉粽还是蛮让人怀念的。 好了,回到正题,上一篇,我们在文章最后,提到了在cowboy_http_req:response/5函数的最后给这个处理请求的进程发送了一个消息 {?MODULE, resp_sent}, 今天,我们来看下,这个进程收到这条消息,又会怎么做呢? 我们... 阅读全文

Cowboy 源码分析(十九)

2012-06-20 01:18 by rhinovirus, 1413 阅读, 收藏,
摘要: 这一篇,接着上一篇没有讲完的内容,继续来看cowboy_http_req:reply/4 函数,我们从下面这段代码开始: RespConn = response_connection(Headers, Connection), ContentLen = case Body of {CL, _} -> CL; _ -> iolist_size(Body) end, HTTP11Headers = case Version of {1, 1} -> [{<<"Connection">>, atom_to_connection(Conne 阅读全文

AS3版本的MaxRects算法测试

2012-06-19 14:00 by rhinovirus, 4796 阅读, 收藏,
摘要: 早上,在微博发现一条信息,关于MaxRects算法的,@杜增强DzQ 移植的关于AS3版本的MaxRects算法,具体地址是:http://www.duzengqiang.com/blog/post/971.html 代码如下:/*Based on the Public Domain MaxRectanglesBinPack.cpp source by Jukka Jylänkihttps://github.com/juj/RectangleBinPack/Based on C# port by Sven Magnus http://unifycommunity.com/wiki/i 阅读全文

Ubuntu下使用GDB断点Go程序

2012-06-15 02:19 by rhinovirus, 9079 阅读, 收藏,
摘要: 大家好,今天为大家带来Ubuntu下,使用GDB断点调试Go程序。由于之前没有接触过GDB调试,而Go语言本身内置也没有什么调试工具,不像Eralng,有Debugger可以使用,我从网上搜索了下,也没有相关的中文教程,所以这边自己研究了下,给新手带来一篇关于GDB简单调试Go程序的文章。(关于GDB的文章还是不少的) 首先,编写测试代码,如下:package mainimport ( "fmt")func main() { fmt.Printf("%s\n", "hello, world") printNumber()}func p 阅读全文

Cowboy 源码分析(十八)

2012-06-15 01:00 by rhinovirus, 1575 阅读, 收藏,
摘要: 在上一篇中,我们整理了下cowboy_http_protocol:header/3函数,在文章的末尾留下2个没有讲到的函数,今天,我们先看下cowboy_http_protocol:error_terminate/2函数,另一个函数下一篇,我们再看。cowboy_http_protocol:error_terminate/2函数定义如下:%% Only send an error reply if there is no resp_sent message.-spec error_terminate(cowboy_http:status(), #state{}) -> ok.error_ 阅读全文

Cowboy 源码分析(十七)

2012-06-13 00:54 by rhinovirus, 1695 阅读, 收藏,
摘要: 大家好,今天继续跟大家分享Cowboy,我发现最近有点慢,没有刚开始写的那么凶猛了,自己想了想:一个是时间上没办法保证了,另一个是自己有点散漫。得好好调整下,一定要坚持下去。游戏马上要上大平台了,最近版本多,事多,但这都不是理由,呵呵,时间就像女人的乳沟,挤挤还是有的。所以到家,洗个澡,继续努力。好了,说的有点多了,回到正题。 上一篇,我们在文章最后,留下了几个疑问,今天一并解决。 首先是,当 erlang:decode_packet/3,这个函数返回 {ok, Header, Rest},而由于Header参数的值不同,将匹配 cowboy_http_protocol:header/... 阅读全文

Cowboy 源码分析(十六)

2012-06-11 14:05 by rhinovirus, 1578 阅读, 收藏,
摘要: 大家好,有四天没跟新这个系列了,因为这几天连续在公司加班,出版本,都是凌晨3,4点才到家,早上一醒来,又去公司忙,昨晚总算把版本发出去了,今天如果没有紧急BUG,在家写会博客,晚会再去。可能做游戏就是如此的节奏,如果有朋友想进游戏这行,就要想想自己能不能抗住这样无加班工资的加班节奏。 说的有点多了,回到Cowboy,在上一篇结尾,我们提到ConnAtom = cowboy_http:connection_to_atom(ConnTokens),%% @doc Walk through a tokens list and return whether%% the connection is... 阅读全文

Cowboy 源码分析(十五)

2012-06-06 00:29 by rhinovirus, 1622 阅读, 收藏,
摘要: 大家好,无意间发现 CodeMirror,挺不错的,在线代码编辑器,支持erlang,go等等语言,官方介绍如下: CodeMirror is a JavaScript component that provides a code editor in the browser. When a mode is available for the language you are coding in, it will color your code, and optionally help with indentation. A rich programming API and a CSS ... 阅读全文

Cowboy 源码分析(十四)

2012-06-05 00:58 by rhinovirus, 1514 阅读, 收藏,
摘要: 大家好,今天接着做几个测试,把上一篇理解并不透彻的几个方法再加强下: 第一个,测试 cowboy_http:whitespace/2 方法的作用,测试代码以及结果如下,左边是测试代码,右边是测试结果: 这样就能很明白的看出这个这个函数的作用了,注意:测试结果第二行,\s 变成空格了。 第二个,测试 cowboy_http:list/3 以及 cowboy_http:token_ci/2 方法,增加打印log,测试代码如下:-module(main).-export([start/0, stop/0]).start() -> io:format("test 1 ~n") 阅读全文

Ubuntu下使用Sublime Text 2搭建Go开发环境

2012-06-04 00:17 by rhinovirus, 21400 阅读, 收藏,
摘要: 大家好,这几天捣鼓了下 golang 的环境,今天跟大家分享下心得。 Go is an open source programming environment that makes it easy to build simple, reliable, and efficient software. 摘自 golang.org 首页的介绍。 Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go语言,Go语言是基于Infe 阅读全文

Cowboy 源码分析(十三)

2012-06-03 14:17 by rhinovirus, 1877 阅读, 收藏,
摘要: 这两天花了些时间搭建了下Go的开发环境,看了些基本的语法,感觉有类c语言基础的朋友们,学起来会容易些,学习Go语言的障碍会比erlang来的少的多。以后有机会跟大家分享Go吧,这边给大家截个图,分享下: 怎么样,看起来是不是跟C好像,呵呵,好了,回到Cowboy,上一篇,我们知道通过 cowboy_http_protocol:header/3 函数和 cowboy_http_protocol:parse_header/2之间的递归调用,来解析头部的每一行,我在上一篇提到 Headers最后一行的为 Connection,那么我们看下,cowboy_http_protocol:head... 阅读全文