代码改变世界

随笔档案-2012年07月

mochiweb 源码阅读(十三)

2012-07-31 00:59 by rhinovirus, 1832 阅读, 收藏,
摘要: 大家好,这一篇我们来看下上一篇没有讲完的mochiweb_acceptor:init/3函数中,关于mochiweb_socket:accept/1函数返回值的处理:init(Server, Listen, Loop) -> T1 = now(), case catch mochiweb_socket:accept(Listen) of {ok, Socket} -> gen_server:cast(Server, {accepted, self(), timer:now_diff(now(), T1)}), call_... 阅读全文

mochiweb 源码阅读(十二)

2012-07-29 14:02 by rhinovirus, 1961 阅读, 收藏,
摘要: 今天也不上班,在家歇着,早起看看书,看看mochiweb源码,这一篇接着昨晚的那篇继续跟大家分享,我们从昨天没看完的mochiweb_acceptor:init/3函数继续往下看:init(Server, Listen, Loop) -> T1 = now(), case catch mochiweb_socket:accept(Listen) of {ok, Socket} -> gen_server:cast(Server, {accepted, self(), timer:now_diff(now(), T1)}), ... 阅读全文

mochiweb 源码阅读(十一)

2012-07-29 02:06 by rhinovirus, 1664 阅读, 收藏,
摘要: 大家好,今天周六,继续接着上一篇,跟大家分享mochiweb源码。上一篇,最后我们看到了mochiweb_socket_server:listen/3函数:listen(Port, Opts, State=#mochiweb_socket_server{ssl=Ssl, ssl_opts=SslOpts}) -> case mochiweb_socket:listen(Ssl, Port, Opts, SslOpts) of {ok, Listen} -> {ok, ListenPort} = mochiweb_socket:port(Listen... 阅读全文

mochiweb 源码阅读(十)

2012-07-27 01:19 by rhinovirus, 2186 阅读, 收藏,
摘要: 大家晚上好,这几天忙着练车,开车真是体力活呀,累的够呛,到家就洗洗睡了,因为是下午1点到8点练车,倒是给了我不少时间看书,《Erlang/OTP并发编程实战》这本书不建议当作入门Erlang书,建议先看完《Erlang程序设计》这本,也可以两本结合着看。不管怎么说,这本书确实很给力,学到不少知识。对了,顺便告诉所有Erlang开发者一个好消息,《Learn You Some Erlang for Great Good! a Beginner's Guide》这本书现在由淘宝褚霸来翻译,算是下一本比较值得期待的Erlang书吧。 好了,回到今天的正题,我们继续来阅读mochiweb源码。 阅读全文

mochiweb 源码阅读(九)

2012-07-24 10:06 by rhinovirus, 1643 阅读, 收藏,
摘要: 今天还是一样,要去驾校练车,早起不用上班,看看mochiweb源码,继续和大家分享。昨天有个函数给跳过了,今天看了下,也有不少知识点,还是补下吧,函数:mochiweb_socket_server:parse_options/1,完整代码如下:parse_options(State=#mochiweb_socket_server{}) -> State;parse_options(Options) -> parse_options(Options, #mochiweb_socket_server{}). 如果传递的是配置是#mochiweb_socket_server{}记录... 阅读全文

mochiweb 源码阅读(七)

2012-07-22 00:35 by rhinovirus, 1772 阅读, 收藏,
摘要: 早上去公司待了半天,回来时,雨正大,虽然媳妇早上提前把伞塞我包里,但是小伞还是顶不住激情澎湃的大雨,到家已经是落汤鸡了。不过,还是蛮喜欢雨后的安静。虽然小区楼下蛙声不断,但还是蛮适合看书,Coding的。 上一篇文章最后,提到了mochiweb_http:start/1函数,这一篇,我们继续往下看:%% @spec start(Options) -> ServerRet%% Options = [option()]%% Option = {name, atom()} | {ip, string() | tuple()} | {backlog, integer()}%% ... 阅读全文

mochiweb 源码阅读(六)

2012-07-20 00:45 by rhinovirus, 2063 阅读, 收藏,
摘要: 大家好,最近比较忙,游戏忙着上各个主流的大平台,事情比较多。还记得上次给大家推荐的Erlang的书吗?《Erlang/OTP并发编程实战》这本书在china-pub上已经有卖了,想学Erlang的朋友,可以买一本看看,地址:http://product.china-pub.com/3662181。一不小心又做广告了,呵呵,好书嘛,总是忍不住推荐给大家。 回到今天的正题,继续和大家分析mochiweb源码,在上一篇,我们总结了下mochiweb_example_deps 这个模块的作用,以及简单介绍了下mochiweb_example的启动。这一篇,我们详细看下启动过程。 首先,我们看下... 阅读全文

mochiweb 源码阅读(五)

2012-07-17 23:42 by rhinovirus, 2166 阅读, 收藏,
摘要: 今天下班比较早,吃完饭继续跟大家分享mochiweb源码。上一篇,我们看完了 mochiweb_example_deps:ensure/0,接下来回到mochiweb_example:start/0,代码如下:%% @spec start() -> ok%% @doc Start the mochiweb_example server.start() -> mochiweb_example_deps:ensure(), ensure_started(crypto), ensure_started(mochiweb_example). 继续往下看,剩下两行代码也很简单,一... 阅读全文

mochiweb 源码阅读(四)

2012-07-17 00:19 by rhinovirus, 2065 阅读, 收藏,
摘要: 大家好,最近Erlang社区好像又火起来了。这里推荐坚强2002同学推荐的Erlang QA站点,这里也顺便推荐给大家,地址:http://langref.org/erlang,也希望大家有问题,可以到上面去留言解决。当然也可以到成立涛创建的Erlang问答,地址:http://erlangqa.com/,也希望对Erlang有兴趣的朋友加入到Erlang社区,为更多人学习Erlang来提供帮助。 好了,回到正题,上一篇我们还没讲完,这篇我们继续看,上一篇,讲到下面这个代码处: lists:filter(fun filelib:is_dir/1, l... 阅读全文

mochiweb 源码阅读(三)

2012-07-16 08:43 by rhinovirus, 2591 阅读, 收藏,
摘要: 大家好,周末总是过的那么快,周六跟北京几个Erlang开发者去森林公园玩了一天,打打三国杀,下下象棋,聊聊天。能多出去走走,认识认识其他的Erlang开发者,还是挺爽的一件事。晚上闲下来,静下心来跟大家继续分享mochiweb源码。 在上一篇,我们简单了学习了几个Erlang的系统函数,以及mochiweb_example_deps:deps_on_path/0 函数,这一篇我们继续从mochiweb_example_deps:new_siblings/1 函数往下看:%% @spec new_siblings(Module) -> [Dir]%% @doc Find new sibli 阅读全文

mochiweb 源码阅读(二)

2012-07-14 00:09 by rhinovirus, 4399 阅读, 收藏,
摘要: 大家好,几天没跟新了,在上一篇,我们简单介绍了mochiweb这个项目,以及下载,编译,创建mochiweb的源码以及示例。今天继续跟大家来分析mochiweb这个项目,跟之前分析cowboy的方法一样,我们找到切入口点,来一一分析每个函数的功能,作用,下面看下上一篇创建的示例都有哪些文件,如下图: 这里除了keepalive.erl 是我从官方example考过来以外,其他为上一篇创建的例子的源码。 我不一一介绍这几个文件了,参考我一直给大家推荐的Erlang OTP 设计原理。好好看几遍,你就对Erlang应用程序有一定的了解了。 我们从运行程序的 mochiweb_exam... 阅读全文

mochiweb 源码阅读(一)

2012-07-09 23:51 by rhinovirus, 9109 阅读, 收藏,
摘要: 博客园的朋友们,这次又有个机会让你们了解Erlang这门不错的语言,赶紧跟随我的步伐吧,抛开你现在拥有的,买本Erlang书,或者下本电子书,开始Erlang的世界吧。这次又是新的征程,让我们来了解mochiweb这个不错的http服务器。 这次的标题修改为源码阅读,而不是源码分析,感觉自己还没到源码分析的那个水平吧,所以称做源码阅读更合适一些。这次我希望自己不再是单纯的看代码,还是那句话,多动手吧,看会了,自己写未必写的出来,所以多尝试写一些实例代码。 好了,回到今天的正题吧,之所以选择 mochiweb,个人感觉是这个项目还是Erlang入门必看的项目吧,许多大牛也推荐新手去看看,... 阅读全文

Cowboy 源码分析(二十八)

2012-07-09 08:03 by rhinovirus, 1646 阅读, 收藏,
摘要: 大家好,上一篇我们总结了cowboy_examples这个例子启动时,进程的启动总结,这一篇,我们看下cowboy如何响应来自浏览器的请求。 首先我们看下,在上一篇cowboy_acceptors_sup启动的100个cowboy_acceptor工作进程,而这个工作进程在初始化时,同时等待来自浏览器的Socket连接,代码如下:-spec start_link(inet:socket(), module(), module(), any(), pid(), pid()) -> {ok, pid()}.start_link(LSocket, Transport, Protocol,... 阅读全文

Cowboy 源码分析(二十七)

2012-07-08 12:42 by rhinovirus, 1511 阅读, 收藏,
摘要: 大家好,从2012-05-15号开始的第一篇Cowboy源码分析,到上一篇2012-07-04的第二十六篇为止,我们已经完整的看完了,Cowboy的启动,处理来自浏览器的请求,响应等整个过程。这这一篇,我们来做个总结。毕竟这是我第一个接触的Erlang开源项目,今天回过头来,从整体上去看这个项目。 首先是cowboy应用的启动,我们从observer上可以看到,当该应用程序启动时,启动进程情况,如下图: 我们右键可以查看该进程的相关信息,这点observer做的还是挺方便的,如下图: 下图为打开的进程信息窗口: 从上面可以很容易的获取一些和该进程相关的信息,比如进程名称... 阅读全文

Ubuntu 使用Git 使用

2012-07-07 00:11 by rhinovirus, 36571 阅读, 收藏,
摘要: 1. 首先到 https://github.com/这里创建一个帐号。 2. 创建Repository,到个人首页以后,点击 New repository,如下图: 3. 添加该代码库名称,描述,其他如下图: 4. 点击 Create repository,完成创建,会显示如下图: 这张图是上传代码到github仓库的关键。 5. 安装Git客户端 打开终端,输入如下指令: sudo apt-get install git 因为我本地之前就安装过,所以这里提示已经是最新的: 6. Generating SSH Keys(生成 SSH 密钥),按照下面的官方... 阅读全文

Erlang observer 简单使用

2012-07-06 07:40 by rhinovirus, 4757 阅读, 收藏,
摘要: 昨晚的大雨带来今天的凉爽,早睡早起。 这一篇,给大家介绍个Erlang工具:observer。 简介(摘自erlang doc): A GUI tool for observing an erlang system. The observer is gui frontend containing various tools to inspect a system. It displays system information, application structures, process information, ets or mnesia tables and a fronte... 阅读全文

Cowboy 源码分析(二十六)

2012-07-04 00:30 by rhinovirus, 1479 阅读, 收藏,
摘要: 大家好,这边给大家推荐一本马上要上市的书《Erlang/OTP并发编程实战》,想要学习Erlang的朋友不要错过,这本书的作者是Martin Logan, Eric Merritt, Richard Carlsson,译者是百度的连城,具体可以看下这里:http://www.ituring.com.cn/book/828 好了,广告发完了,回到今天的正题,继续跟大家分享Cowboy源码。上一篇,讲完了 cowboy_http_req:body_length/1 函数,今天继续往下看,如图: 这里返回的 Length = 0,所以这里返回 {done, Req3#http_req{b... 阅读全文

Cowboy 源码分析(二十五)

2012-07-03 01:36 by rhinovirus, 1313 阅读, 收藏,
摘要: 大家好,之前想改改熬夜的习惯,无奈熬夜的习惯改不过来啊,毕竟熬了几年了,改起来确实费劲,那就继续学习吧,好几天没跟新这个系列了,今天接着上一篇未讲完的继续跟大家分享。stream_body(Req=#http_req{body_state=waiting}) -> case parse_header('Transfer-Encoding', Req) of {[<<"chunked">>], Req2} -> stream_body(Req2#http_req{body_state= {stream, fun cowb.. 阅读全文