论坛首页 综合技术论坛

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

浏览 3548 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-21  
试了下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大牛们给解释下吧

   发表时间:2009-07-21  
错误和代码再详细一些吧。
erlang的http 不好用,这个是公认的。
不然为什么会有 ibrowser 了。。
http://github.com/cmullaparthi/ibrowse/tree/master
0 请登录后投票
   发表时间:2009-07-21  
R13B02在大力修正这些问题
0 请登录后投票
   发表时间: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

0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics