java - रेस्टलेट, सीएलएपी, अजाक्स, और चंक टाइमआउट



ajax json (1)

मुझे नहीं पता कि आप अपने एप्लिकेशन के लिए किस सर्वर कनेक्टर का उपयोग करते हैं लेकिन ऐसा लगता है कि यह डिफ़ॉल्ट है।

रेस्टलेट विभिन्न स्तरों पर प्लग करने योग्य और एक्स्टेंसिबल है। मैं आपको जेट्टी का उपयोग करने की सलाह देता हूं। ऐसा करने के लिए, बस अपने org.restlet.ext.jetty.jar भीतर जेट्टी एक्सटेंशन ( org.restlet.ext.jetty.jar ) के लिए JAR फ़ाइल जोड़ें। कनेक्टर स्वचालित रूप से पंजीकृत होगा और डिफ़ॉल्ट एक के बजाय उपयोग करेगा।

मैं आपको नवीनतम संस्करण (2.3) में अपग्रेड करने की भी सलाह देता हूं।

रेस्टलेट इंजन में कौन से कनेक्टर पंजीकृत हैं, यह देखने के लिए, आप निम्नलिखित कोड का उपयोग कर सकते हैं:

List<ConnectorHelper<Server>> serverConnectors
       = Engine.getInstance().getRegisteredServers();
for (ConnectorHelper<Server> connectorHelper : serverConnectors) {
    System.out.println("Server connector: "+connectorHelper);
}

ऐसा करने के बाद आपको ऐसी समस्याएं नहीं होनी चाहिए।

आशा है कि यह आपकी मदद करता है, थियरी

हम हमारे पास एक प्रोजेक्ट के लिए एक छोटा सा REST सर्वर करने के लिए RESTlet का उपयोग कर रहे हैं। हम Application से विरासत में प्राप्त वर्ग में मार्गों का एक समूह स्थापित करते हैं:

public static void createRestServer(ApplicationContext appCtx, String propertiesPath) throws Exception {

  // Create a component
  Component component = new Component();
  component.getServers().add(Protocol.HTTP, 8081);
  component.getClients().add(Protocol.FILE);
  component.getClients().add(Protocol.CLAP);

  Context context = component.getContext().createChildContext();
  RestServer application = new RestServer(context);

  application.getContext().getParameters().add("useForwardedForHeader", "true");

  application.getContext().getAttributes().put("appCtx", appCtx);
  application.getContext().getAttributes().put("file", propertiesPath);

  // Attach the application to the component and start it
  component.getDefaultHost().attach(application);
  component.start();
}

private RestServer(Context context) {
  super(context);
}

public synchronized Restlet createInboundRoot() {
  Router router = new Router(getContext());

  // we then have a bunch of these
  router.attach("/accounts/{accountId}", AccountFetcher.class); //LIST Account level
  // blah blah blah

  // finally some stuff for static files:
  //
  Directory directory = new Directory(getContext(),
     LocalReference.createClapReference(LocalReference.CLAP_CLASS, "/"));
  directory.setIndexName("index.html");
  router.attach("/", directory);

  return router;
}

समस्या: अगर मैं एक वेब पेज से Ajax के माध्यम से JAR में एक .js फ़ाइल का अनुरोध करता हूं (इस JAR से CLAP के माध्यम से भी लोड किया गया है), तो यह केवल उस फ़ाइल के पहले 7737 बाइट्स लौटाएगा और फिर लटकाएगा। मैं इसे शेष फ़ाइल को वापस करने के लिए नहीं मिल सकता। यह हमेशा एक ही संख्या के बाइट्स के बाद लटकाता है। 50 बार में 1 काम करता है।

किसी भी विचार क्यों यह लटका हुआ है? क्या मैं सिर्फ CLAP और स्थिर फ़ाइलों के लिए बंद एन्कोडिंग को बंद कर सकता हूं (हमारे सभी काफी छोटे हैं)।

यह हमें पागल कर रहा है।





chunked-encoding