Ruby Sinatra с искане за много части пост - руби, node.js, http, sinatra

Не сте сигурни дали това е проблем, причинен от заявката за много части. От страна на клиента изпратих заявка за публикуване чрез node.js. Постлото тяло е JSON масив

var post_req = http.request(options, function(res) {
res.setEncoding("utf8");
res.on("data", function (chunk) {
console.log("Response: " + chunk);
});
}).on("error",function(){});
post_req.write(data.toString().split("").join(""));
post_req.end();

От страна на сървъра (рубин синатра), имам помощник, който просто отпечатва масива JSON

post "/prediction"  do
puts request.body.read
end

Той отпечатва странния непълн json масив със странна струна "13b2b" пред масива. Получените данни могат да бъдат намерени тук: https://gist.github.com/wenchaojiang/9880181

Сигурен съм, че изпратените от мен данни са валиден JSON масив, защо sinatra не може да го получи напълно и откъде идва странното "13b2b"? някаква идея?

-----------Редактиране -------------

Данните от извадката са огромни. тя може да се намери тук: https://gist.github.com/wenchaojiang/9881235

Друго странно нещо е, когато използвам следния node.js сървър, json може да бъде получен правилно

http.createServer(function (req, res) {
if (req.method == "POST") {
var queryData = "";
req.on("data", function(data) {
queryData += data;
});

req.on("end", function() {
var obj = JSON.parse(queryData);

console.log(JSON.parse(queryData).payload);

res.writeHead(200, "OK", {"Content-Type": "text/plain"});
res.end();
});
}
}).listen(3001, "0.0.0.0");

-----------------Редактиране ----------------------------

Също така изглежда, че Синатра ще получи 2post искания, дори ако го изпратих само веднъж от страна node.js. Сървърът, полученият непълен json, споменат по-горе, от първата заявка и втората заявка за публикуване, води до следната грешка

!! Invalid request
Invalid HTTP format, parsing fails.
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/request.rb:82:in `execute"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/request.rb:82:in `parse"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/connection.rb:39:in `receive_data"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run_machine"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/backends/base.rb:63:in `start"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/server.rb:159:in `start"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/handler/thin.rb:13:in `run"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/server.rb:265:in `start"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/server.rb:137:in `start"
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/bin/rackup:4:in `<top (required)>"
/usr/local/rvm/gems/ruby-1.9.3-p194/bin/rackup:19:in `load"
/usr/local/rvm/gems/ruby-1.9.3-p194/bin/rackup:19:in `<main>"

Отговори:

1 за отговор № 1

Мисля (въпреки че не мога да възпроизведа точно това, което виждате) това се дължи на тънкия сървър, който не се занимава кодиран трансфер искания. Възелът разделя файла на няколко части и се опитва да изпрати всеки парче отделно. Странният низ (13b2b) е шестнадесетичната стойност на размера на първото парче (макар че това всъщност не съвпада с данните в състава ви) и е отрязано, защото клиентът очаква да изпрати останалото по-късно.

Сървърът на възлите функционира, защото правилно обработва заявките, а другите (неправилно формулирани) заявки, които Sinatra виждат, са следните парчета.

Можете да опитате да използвате друг сървър във вашето приложение Sinatra, за да видите дали работи. Вебрик изглежда добре:

set :server, "webrick"

Свързани въпроси
Най - известен