`
bachmozart
  • 浏览: 111326 次
  • 性别: 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

相关推荐

    Inets mod_xsl-开源

    通过适配器,Inets mod_xsl能够调用Sablotron来执行转换任务,确保了高效且准确的转换过程。 **开源软件的优势** 开源软件的核心优势在于透明度和社区支持。Inets mod_xsl的开源性质意味着任何用户都可以查看其源...

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

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

    otp_src_22.0_h.tar.gz

    OTP包含大量的标准库,如加密算法(crypto)、HTTP服务器(inets)、Mnesia分布式数据库、公共对话协议(public_key)、SSL支持、系统监控和管理(syslog、snmp)等。这些库为开发高效、可靠的系统提供了便利。 4....

    otp_src_17.0.tar.gz

    - 监督树(Supervision Tree):OTP的监督树模型确保系统在组件失败时能够自动恢复,增强了系统的健壮性。 - 链接与监视(Linking & Monitoring):链接机制允许进程间检测彼此的死亡,而监视则能在不关联进程的...

    Erlang实现的百度云推送Android服务端实例

    在这个示例中,`inets:start()`启动了Erlang的HTTP客户端库,允许我们发送HTTP请求。`ApiKey`、`Channel_Id`、`Device_Type` 和 `Message_Type` 是构建请求所需的基本参数。`TitleStr` 和 `DescriptionStr` 定义了...

    otp_win_64_24.0.exe

    1. Erlang VM(虚拟机):BEAM(Binary Emulator),它是Erlang运行时的核心,负责执行Erlang代码。 2. 标准库:包含了各种预定义的模块,如lists、io、math等,为常见的编程任务提供函数支持。 3. 工具集:如编译器...

    erlang otp 19.1 官网文档 HTML格式

    - **Inets**:提供了HTTP服务器和客户端,以及其他网络服务。 - **Crypto**:加密和哈希函数库。 - **Dialyzer**:静态代码分析工具,用于找出潜在的错误和类型不匹配。 - **公共API工具**:如XML和JSON解析器,日期...

    otp_src_23.0.tar.gz

    2. **应用程序**:OTP包含许多预先编写好的应用,如Mnesia(分布式数据库)、Inets(网络服务)、Crypto(加密库)、PubSub(发布订阅系统)等,这些在23.0版本中可能有新的特性和bug修复。 3. **编译器和工具**:...

    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 (). { ...

    java获取ip地址与网络接口的方法示例

    Java 获取 IP 地址与网络接口的方法是在 Java 编程中获取计算机的 IP 地址和网络接口信息的方法。以下是通过 Java 获取 IP 地址和网络接口的方法示例。 获取主机对象 在 Java 中,获取主机对象可以使用 `...

Global site tag (gtag.js) - Google Analytics