2012-05-08 13 views
17

, dokümanına klasik bir merhaba dünya örneği,Raf yanıtı gövdesi neden bir dizi değil bir dizidir? Üçüncü değerdir neden

class HelloWorld 
    def call(env) 
    return [200, {}, ["Hello world!"]] 
    end 
end 

benim sorum [Merhaba dünya! "] değil, 'Merhaba dünya'?, dokümanına itibaren

vücut her yanıt vermelidir ve sadece dize değerlerini verim gerekir. Bu yılında Ruby 1.9 kıracak kadar vücut kendisi dize örneği olmamalıdır.

Neden vücudun ihtiyacı her birine cevap vermek için? ve hangi durumda önemli?

+0

Öyle görünüyor ki, arabelleğe alınabilir ve daha sonra isteyen kişilere gönderilebilir. Yanıt oldukça büyük olabilir, bu yüzden sunucular "akışı". Sorunun, beden üzerindeki tüm iterasyondan başka Ruby 1.9 ile ilgili maddeye daha spesifik olduğu nedir? –

+0

Aynı zamanda, C dünyasında send() ve recv() öğelerinin nasıl çalıştığını düşündüğünüzde de mantıklıdır. Recv'yi çağırdığınızda, onu doldurduğu karakterlerin bir arabelleğine verirsiniz. Tüm vücudu tek bir aramaya ulaştırdığınızdan emin değilsiniz. Bir dizi karakter gönderdiğinizde de aynısı geçerlidir. – nickethier

cevap

8

Rafın python'un wsgi'sinden kaynaklandığını düşünüyorum. İşte piton için açıklama: http://www.python.org/dev/peps/pep-3333/#buffering-and-streaming

+1

doğru. ve içinde bulunduğunuz bileşeniniz önceden oluşturulmuş bir dizgi dizisi göndermekten başka bir şey yapmazsa, Rack size "her" cevabına göre parçalarınızdaki ilerlemenizi bildirmek için güzel bir 'sayısız' sözleşme verir. Merhaba bir dünya örneği için aptalca görünebilir olsa da, oluşturulan HTML'yi tüküren bir şablon motoru gibi, daha gerçek bir şeyle çok daha anlamlı hale gelir, örneğin –

+1

Bağlantılı olduğunuz site aşağıya gidebileceğinden, yalnızca bağlantıya verilen yanıtlar önerilmez değişiklik. Lütfen önemli noktaları burada yazınız. –

6

cümle The Body itself should not be an instance of String, as this will break in Ruby 1.9. bakılırsa, ben yanıtın son öğesi bir Enumerable olmak zorunda olduğunu kabul ediyorum. Bu modülü 1.9'da dahil ederek String s durdurulduğundan, bunu uygulayan bir çeşit koleksiyona ihtiyacınız olacaktır.

BTW: merhaba dünya örnekleri genellikle bir şeyin neden belli bir şekilde yapıldığını anlamak için çok da büyük değil, çok önemsiz.

İlgili konular