1

次のように、サーバーに呼び出しを送信するために Ruby で使用XMLRPC::Clientしています (Ruby 1.8 から 2.0 と同じ動作)。

server = XMLRPC::Client.new2( url )
server.timeout = 300
response = server.call( "service.methodname", bigarray )

bigarray渡される が大きすぎない限り、すべて正常に動作します。約 10K のフロートが含まれている瞬間から、次のエラー トレースが表示されます。

$ ruby client_largeinputset.rb 
/Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `read_nonblock': Connection reset by peer (Errno::ECONNRESET)
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:153:in `rbuf_fill'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:122:in `read_all'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:292:in `block in read_body_0'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:269:in `inflater'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:274:in `read_body_0'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:201:in `read_body'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:226:in `body'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:163:in `reading_body'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1411:in `block in transport_request'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `catch'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `transport_request'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1375:in `request'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1321:in `request_post'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/xmlrpc/client.rb:477:in `do_rpc'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/xmlrpc/client.rb:281:in `call2'
from /Users/aliekens/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/xmlrpc/client.rb:262:in `call'
from client_largeinputset.rb:28:in `<main>'

XMLRPC の仕様に呼び出しサイズの制限があることは認識していませんが、私のワークフローのどこかに制限があるようです。

最初に: これは私の ruby​​ クライアントの問題ですか、それとも私のサーバー (Abyss HTTP サーバー上で xmlrpc-c で記述) の問題であり、大きなリクエストを受け入れない可能性がありますか?

クライアント側にある場合、この問題を回避する方法はありますか? クライアント側で呼び出し要求のサイズを変更できますか (制限がある場合)? この問題を回避できる代替ルート (Ruby のネイティブ XMLRPC::Client 実装以外) はありますか? できれば、実際にサーバーのサイズの問題でない限り、サーバー側を微調整することなくクライアント側でこれを解決するソリューションを探しています。

4

0 に答える 0