2013-05-02 11 views
7

प्रलेखन states कि स्प्रे chunked प्रतिक्रियाओं को संभालने में सक्षम है, लेकिन मैं किसी भी उदाहरण के साथ शुरू करने के लिए नहीं मिल रहा है के साथ निपटने।chunked प्रतिक्रिया स्प्रे उदाहरण

object Main extends App { 

    implicit val system = ActorSystem() 
    import system.dispatcher 
    val log = Logging(system, getClass) 
    val ioBridge = IOExtension(system).ioBridge() 
    val httpClient = system.actorOf(Props(new HttpClient(ioBridge))) 

    val conduit = system.actorOf(
    props = Props(new HttpConduit(httpClient, "localhost", 3000)), 
    name = "http-conduit" 
) 

    val pipeline = HttpConduit.sendReceive(conduit) 
    val response = pipeline(
    HttpRequest(
     method = GET, 
     uri = "/output.cgi.xml" 
    ) 
) 

    response onComplete { 
    case Success(a) => 
     log.info("Success: " + a) 
     system.shutdown() 

    case Failure(error) => 
     log.error(error, "Failure") 
     system.shutdown() 
    } 

} 

मैं response-chunk-aggregation-limit = 0 निर्धारित किया है, कुछ भी नहीं अभी भी होता है: मेरे अनुभवहीन कार्यान्वयन है।

तुम मुझे उदाहरण के साथ प्रदान कर सकते हैं के पढ़ने प्रतिक्रिया chunked?

अद्यतन

मैं निम्नलिखित के रूप में मेरे कोड फिर से लिख दिया:

object Main extends App { 

    implicit val system = ActorSystem() 
    import system.dispatcher 
    val log = Logging(system, getClass) 
    val ioBridge = IOExtension(system).ioBridge() 
    val httpClient = system.actorOf(Props(new HttpClient(ioBridge))) 

    actor(new Act { 
    httpClient ! Connect(new InetSocketAddress("localhost", 3000)) 

    become { 
     case Connected(_) => 
     log.info("connected") 
     sender ! HttpRequest(GET, "/output.cgi.xml") 
     case Closed(handle, reason) => 
     log.info("closed: " + reason) 
     system.shutdown() 
     case ChunkedResponseStart(res) => 
     log.info("start: " + res) 
     case MessageChunk(body, ext) => 
     log.info("chunk: " + body) 
     case ChunkedMessageEnd(ext, trailer) => 
     log.info("end: " + ext) 
     case m => 
     log.info("received unknown message " + m) 
     system.shutdown() 
    } 
    }) 

} 

और अब मैं closed: ProtocolError(Aggregated response entity greater than configured limit of 1048576 bytes) प्राप्त कर रहा हूँ बस के बाद कनेक्शन स्थापित हो।

मेरे application.conf

spray.can { 
    client { 
    response-chunk-aggregation-limit = 0 
    } 
} 
+0

डब्ल्यूडीवाईएम "कुछ भी नहीं होता" के साथ? क्या आप कह रहे हैं कि आप कभी भी प्रश्न का नतीजा नहीं लेते? – jrudolph

+0

स्प्रे का कौन सा संस्करण आप उपयोग करते हैं? – jrudolph

+0

मैं 1.1-एम 7 का उपयोग कर रहा हूं। मेरा मतलब है कि मुझे नहीं पता कि एक चुस्त तरीके से प्रतिक्रिया कैसे संभालें। वर्तमान में 'पर पूर्ण' को समेकित प्रतिक्रिया प्राप्त होती है। – lambdas

उत्तर

9

आप, देखा है के रूप में HttpConduit केवल एकत्रित प्रतिक्रियाओं पर काम करता है। आपको स्प्रे-कैन लेयर पर गिरना होगा, एकल भाग को संभाल लें।

दुर्भाग्य से, हम वर्तमान में दिखाई तुम ऐसा कैसे करना होगा कोई उदाहरण नहीं है।

  1. सेट response-chunk-aggregation-limit = 0
  2. httpclient अभिनेता को Connect भेजें और इंतजार के लिए Connected
  3. Connected संदेश
  4. हैंडल अनुरोध संदेशों chunked के प्रेषक को HttpRequest भेजें: मोटे तौर पर, यह इस (M7 में) की तरह काम करता ChunkedResponseStart, MessageChunk, और ChunkedResponseEnd

अधिक जानकारी के लिए देख http://spray.io/documentation/spray-can/http-client/#chunked-responses

इसके विपरीत HttpConduit उपयोग करने के लिए, यह आप अपने कनेक्शन अपने आप को प्रबंधित करने के लिए (यदि है कि आप HttpConduit क्यों इस्तेमाल कर रहे थे) है का मतलब है। हाल की नाइटली में यह आसान हो गया, क्योंकि नया HttpClient स्वचालित रूप से कनेक्शन पूल का समर्थन करता है, आदि। यदि आपको इसकी आवश्यकता है तो आप मेलिंग सूची में और जानकारी भी प्राप्त कर सकते हैं।

+0

क्या इसका मतलब यह है कि मेरे क्लाइंट को भाग के रूप में हर बड़ी पर्याप्त प्रतिक्रिया प्राप्त होगी, या कुछ विशेष सर्वर-साइड समर्थन की आवश्यकता है? – lambdas

+0

यदि आप सर्वर भेजता है तो आप वर्तमान में केवल भाग प्राप्त करते हैं। मैंने एक क्रंक एपीआई का समर्थन करने के लिए एक टिकट जोड़ा, भले ही वास्तविक प्रतिक्रिया तार पर नहीं हो पाई: https://github.com/spray/spray/issues/281 – jrudolph

+0

अच्छा, धन्यवाद! – lambdas

संबंधित मुद्दे