首页 技术 正文
技术 2022年11月9日
0 收藏 319 点赞 5,086 浏览 2283 个字

1.简介

ibrowse是用erlang写的一个HTTP client.github地址:https://github.com/cmullaparthi/ibrowse 使用方法见项目的readme。

2.流程

ibrowse:start —> 为每一个{host,port}创建一个ibrowse_lb的gen_server进程,用于管理此{host, port}下的连接状态。

它会根据配置中的maxsession创建ibrowse_http_client的work(:gen_server)是用来创建实际的连接。每个work可以同时处理maxpipe个连接。

如果你不在priv/ibrowse.conf 里面配置,max_sessions max_pipe_size都是10,如果想大并发使用,请务必根据实际情况测试,然后选择适当的参数。

它有自己的负载均衡(load balance)机制:用Orderedi set ets ibrowse_lb优选进程中的每个session同时处理的连接数中最少的session。

如果你不想使用load balance机制:你可以使用

ibrowse:start_worker_process/1
ibrowse:send_req_direct/4,5,6,7,
ibrowse:stop_work_process/1

来自己管理负载。

3.性能测试

可以使用https://github.com/talko/httpcbench 来对erlang写的这几个主流HTTP client做下测试。

最好把里面的http请求都改成自己实际的请求地址。

4.配置说明

%%priv/ibroswer.conf
{dest,HostName1,Portnumber1,MaxSessions,MaxPipelineSize,Options}
{dest,HostName2,Portnumber2,MaxSessions,MaxPipelineSize,Options}
4.1 为每一对{Host,Port}最多创建MaxSessions;
4.2 每个session最多可同时处理MaxPipeLineSize;
4.3 如果所有的session都达到了Max,就会返回重试三次后返回{error,try_later};
4.4 Options为connect网络参数。可见文档:
%% optionList() = [option()]
%% option() = {max_sessions, integer()} |
%% {response_format,response_format()}|
%% {stream_chunk_size, integer()} |
%% {max_pipeline_size, integer()} |
%% {trace, boolean()} |
%% {is_ssl, boolean()} |
%% {ssl_options, [SSLOpt]} |
%% {pool_name, atom()} |
%% {proxy_host, string()} |
%% {proxy_port, integer()} |
%% {proxy_user, string()} |
%% {proxy_password, string()} |
%% {use_absolute_uri, boolean()} |
%% {basic_auth, {username(), password()}} |
%% {cookie, string()} |
%% {content_length, integer()} |
%% {content_type, string()} |
%% {save_response_to_file, srtf()} |
%% {stream_to, stream_to()} |
%% {http_vsn, {MajorVsn, MinorVsn}} |
%% {host_header, string()} |
%% {inactivity_timeout, integer()} |
%% {connect_timeout, integer()} |
%% {socket_options, Sock_opts} |
%% {transfer_encoding, {chunked, ChunkSize}} |
%% {headers_as_is, boolean()} |
%% {give_raw_headers, boolean()} |
%% {preserve_chunked_encoding,boolean()} |
%% {workaround, head_response_with_body} |
%% {worker_process_options, list()}
%%
%% stream_to() = process() | {process(), once}
%% process() = pid() | atom()
%% username() = string()
%% password() = string()
%% SSLOpt = term()
%% Sock_opts = [Sock_opt]
%% Sock_opt = term()
%% ChunkSize = integer()
%% srtf() = boolean() | filename() | {append, filename()}
%% filename() = string()
%% response_format() = list | binary

流程图可见:https://github.com/zhongwencool/issue_blog/tree/master/freemind  使用freemind记录。

[Erlang32]ibrowse流程及性能测试

first try SSL using Erlang

[Erlang32]ibrowse流程及性能测试

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,491
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,294