`
bachmozart
  • 浏览: 109996 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

inets 的http client在大量请求调用时有错误

阅读更多
试了下inets的http client,调用http:request方法,在单个进程内少量调用,或多个进程内少量调用都没有问题,但是只要调用次数达到几千以上,就会报错

错误信息基本就是bad_return_value,invalid version等等

不知道有没有人试过 大名鼎鼎的Richard Jones在 A Million-user Comet Application with Mochiweb里面的那个floodtest的例子,一样会报这个错误

receive
        {http,{_Ref,stream_start,_X}} ->  recv({Active+1,Closed,Chunks});
        {http,{_Ref,stream,_X}} ->          recv({Active, Closed, Chunks+1});
        {http,{_Ref,stream_end,_X}} ->  recv({Active-1, Closed+1, Chunks});
        {http,{_Ref,{error,Why}}} ->
            io:format("Closed: ~w\n",[Why]),
            recv({Active-1, Closed+1, Chunks});
        {loadurl, Url} ->
            http:request(get, {Url, []}, [], [{sync, false}, {stream, self}, {version, 1.1}, {body_format, binary}]),
                recv(Stats)
    end.


这段代码是单个进程运行的,另外一个进程不断发{loadurl,url}的消息,让httpclient 不停调用request方法

我试了,用多个进程不停调用这个一样会报错,但是只要调用次数比较少,就不会出错,服务器端的资源限制等都没有任何问题

呼唤javaeye上的erlang大牛们给解释下吧

分享到:
评论
3 楼 mryufeng 2010-03-09  
这个问题已经修复, 你可以再测试下, 顺便做下性能测试:

1.3  Inets 5.1.3
Improvements and New Features

-
Fixed Bugs and Malfunctions

    *

      [httpc] - Raise condition. When http:request is called and httpc_manager selects a session where there's already a pending request, then the connection handler for that session effectively resets its parser, readying it for the response to the second request. But if there are still some inbound packets for the response to the first request, things get confused.

      tomas.abrahamsson@gmail.com

      Own Id: OTP-8154

2 楼 mryufeng 2009-07-21  
R13B02在大力修正这些问题
1 楼 litaocheng 2009-07-21  
错误和代码再详细一些吧。
erlang的http 不好用,这个是公认的。
不然为什么会有 ibrowser 了。。
http://github.com/cmullaparthi/ibrowse/tree/master

相关推荐

    erlang-inets-19.3.6.4-1.el7.x86_64.rpm

    erlang-inets-19.3.6.4-1.el7.x86_64.rpm

    Inets mod_xsl-开源

    mod_xsl-用于Inets erlang Web服务器的XSL转换模块

    erlang_twitter:一个Erlang Twitter客户端

    1> inets:start(). ... 2> Auth = {"ngerakines", "secretpassword!"}. 3> twitter_client:status_mentions(Auth, []). twitter_client:status_mentions({"ngerakines", "secretpassword"}, []). [{status,"Mon Nov...

    opentracing-erlang:ERlang的开放跟踪工具包

    依存关系共享给otter和公共库函数是常见的测试依赖项(即不属于生产版本) 为了避免外部依赖性,默认情况下,OTTER使用OTP inets HTTP客户端(httpc)将跨度发送到跟踪收集器。 但是,htc在高吞吐量方案中的声誉相当...

    erlang-oauth:Erlang OAuth 1.0实现

    生成签名的功能(客户端),验证签名的功能(服务器端),以及一些用于发出OAuth HTTP请求的便捷功能(客户端)。 Erlang / OTP兼容性 Erlang / OTP 21或更高版本。 Rebar3兼容性 将erlang-oauth作为依赖项添加到您...

    simple_bridge:一个简单,标准化的Erlang HTTP服务器接口库

    简单桥 通过创建标准化接口,SimpleBridge减轻了对多个Erlang HTTP服务器进行编码的麻烦。 它目前支持Cowboy,Inet,... 这意味着您可以在Inets,Mochiweb和Webmachine上运行websocket ,而本机都不支持Websockets。

    rest_service:简单的基于牛仔的 REST 服务

    休息服务简单的基于牛仔的 REST web 服务... ok 与服务交互: 1 > inets : start (). ok 2 > httpc : request ( get , { " http://localhost:8080/resource/123 " , []}, [], []). { ok ,{{ " HTTP/1.1 " , 404 , " No

    mechanizerl:模仿WWW的Erlang Web测试工具

    根据在名称中愚蠢的位置插入“ erl”的实际惯例命名。 这主要是围绕httpc的便利包装。 例子: erl - pa ebin - boot start_sasl - s inets - s xmerl - s mechanizerl 1 > Mech = mechanizerl : new (). { ...

Global site tag (gtag.js) - Google Analytics