拾遗笔记

mochiweb 的使用 及 可开tcp连接数的(http长连接) 测试

2 mochiweb 的使用

  1. 先得到源码
    git clone git://github.com/mochi/mochiweb.git
    
  2. 在根目录下make 进行编译
  3. make app PROJECT=mochiweb_test
    

    然后在mochiweb 同级目录下会生成mochiwebtest目录 在这个目录下,运行make 对这个项目进行一定的准备工作,比如得到它depend 的项目mochiweb(会上网继续下载mochiweb) 启动mochiweb ,

    ./start-dev.sh
    

    然后在浏览器里访问http://localhost:8080/

mochiwebtestweb.erl 模块是处理具体业务 的模块。 比如:

....
		case Path of
		    "time" ->%% 新增了 /timer 这个 URL,它是一个 HTTP Chunked 的例子
		    Response = Req:ok({"text/plain", chunked}),
		    time(Response);
		    _ ->
			Req:serve_file(Path, DocRoot)
		end;
...


%% 打印当前时间,间隔一秒,再在已经打开的 http 连接之上,再次打印,这也就是所谓 HTTP长连接/ServerPush 的一种
time(Resp)->
    Resp:write_chunk(io_lib:format("The time is: ~p~n",
				   [calendar:local_time()])),
    timer:sleep(1000),
    time(Resp)        .

当访问http://localhost:8080/time 时,调用 time(Resp )方法进行处理,变是一种长 连接 在对 src/目录下的erl 文件进行编辑后,运行make 命令,在 ./start-dev.sh启动模式下,会自动加载编译的文件,只需要在浏览器中刷新即 可

3 可开tcp连接数的(http长连接) 测试

参考了http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1 tcploadtest.erl

%% tcp_load_test:start(10000).
%%或
%% tcp_load_test:start("http://localhost:8080/time",10000).
%% 实是际访问
%% http://localhost:8080/time?id=1
%% ...
%% http://localhost:8080/time?id=10000

结果似乎是连接达到4000的时候,cpu 占用率已经极大,响应变慢 达到4900时,测试用的客户端,因

eheap_alloc: Cannot allocate 583848200 bytes of memory (of type "heap").

退出, 客户端的cpu 似乎比mochiweb服务器的占用率大,故,若非单机测试,结果或许会好一 些. 结果以下面格式在客户端显示出来

 {Active, Closed, Chunks}
{活动连接数,关闭的连接数(测试过程中始终为0),由服务端端发送的chunks总数}

Comments

comments powered by Disqus