Başlamak için, bu konudaki tartışmaları gözden geçirdim ve sorunuma bir yanıt bulamadım ve bu yüzden bu soruyu açıyorum.Maksimum iş parçacığı sorunu
Restlet 2.0.15 kullanarak bir web hizmeti kurdum. Uygulama yalnızca sunucu içindir. Sunucuya bağlantılar bir web sayfası üzerinden yapılır ve bu yüzden ClientResource kullanmamıştım. parçacığı havuzu sorunun tükenme verilen cevapların çoğu
#exhaust + #release
dahil edilmesini önerdi web hizmetinin süreci tek function.Receive olarak web sayfası, sorgudan GET
isteklerini tarif edilebilir
bileşen oluşturma kodu için kod:
Component component = new Component();
component.getServers().add(Protocol.HTTP, 8188);
component.getContext().getParameters().add("maxThreads", "512");
component.getContext().getParameters().add("minThreads", "100");
component.getContext().getParameters().add("lowThreads", "145");
component.getContext().getParameters().add("maxQueued", "100");
component.getContext().getParameters().add("maxTotalConnections", "100");
component.getContext().getParameters().add("maxIoIdleTimeMs", "100");
component.getDefaultHost().attach("/orcamento2013", new ServerApp());
component.start();
parametreleri verimliliğini en üst düzeye çabasıyla benim açımdan bu forum ve modifikasyon bir tartışma mevcut sonucudur. aşağıdaki gibi
uygulama gelince, kodu:
@Override
public synchronized Restlet createInboundRoot() {
// Create a router Restlet that routes each call to a
// new instance of HelloWorldResource.
Router router = new Router(getContext());
// Defines only one route
router.attach("/{taxes}", ServerImpl.class);
//router.attach("/acores/{taxes}", ServerImplAcores.class);
System.out.println(router.getRoutes().size());
OriginFilter originFilter = new OriginFilter(getContext());
originFilter.setNext(router);
return originFilter;
}
Çok, burada bir tartışma bulunan bir örnek filtre kullanılır. Uygulama aşağıdaki gibidir:
public class ServerImpl extends ServerResource {
String itemName;
@Override
protected void doInit() throws ResourceException {
this.itemName = (String) getRequest().getAttributes().get("taxes");
}
@Get("xml")
public Representation makeItWork() throws SAXException, IOException {
DomRepresentation representation = new DomRepresentation(MediaType.TEXT_XML);
DAL dal = new DAL();
String ip = getRequest().getCurrent().getClientInfo().getAddress();
System.out.println(itemName);
double tax = Double.parseDouble(itemName);
Document myXML = Auxiliar.getMyXML(tax, dal, ip);
myXML.normalizeDocument();
representation.setDocument(myXML);
return representation;
}
@Override
protected void doRelease() throws ResourceException {
super.doRelease();
}
}
: Bu uyarıyı veren süreçleri çöküyor çünkü
public OriginFilter(Context context) {
super(context);
}
@Override
protected int beforeHandle(Request request, Response response) {
if (Method.OPTIONS.equals(request.getMethod())) {
Form requestHeaders = (Form) request.getAttributes().get("org.restlet.http.headers");
String origin = requestHeaders.getFirstValue("Origin", true);
Form responseHeaders = (Form) response.getAttributes().get("org.restlet.http.headers");
if (responseHeaders == null) {
responseHeaders = new Form();
response.getAttributes().put("org.restlet.http.headers", responseHeaders);
responseHeaders.add("Access-Control-Allow-Origin", origin);
responseHeaders.add("Access-Control-Allow-Methods", "GET,POST,DELETE");
responseHeaders.add("Access-Control-Allow-Headers", "Content-Type");
responseHeaders.add("Access-Control-Allow-Credentials", "true");
response.setEntity(new EmptyRepresentation());
return SKIP;
}
}
return super.beforeHandle(request, response);
}
@Override
protected void afterHandle(Request request, Response response) {
if (!Method.OPTIONS.equals(request.getMethod())) {
Form requestHeaders = (Form) request.getAttributes().get("org.restlet.http.headers");
String origin = requestHeaders.getFirstValue("Origin", true);
Form responseHeaders = (Form) response.getAttributes().get("org.restlet.http.headers");
if (responseHeaders == null) {
responseHeaders = new Form();
response.getAttributes().put("org.restlet.http.headers", responseHeaders);
responseHeaders.add("Access-Control-Allow-Origin", origin);
responseHeaders.add("Access-Control-Allow-Methods", "GET,POST,DELETE"); //
responseHeaders.add("Access-Control-Allow-Headers", "Content-Type");
responseHeaders.add("Access-Control-Allow-Credentials", "true");
}
}
super.afterHandle(request, response);
Representation requestRepresentation = request.getEntity();
if (requestRepresentation != null) {
try {
requestRepresentation.exhaust();
} catch (IOException e) {
// handle exception
}
requestRepresentation.release();
}
Representation responseRepresentation = response.getEntity();
if(responseRepresentation != null) {
try {
responseRepresentation.exhaust();
} catch (IOException ex) {
Logger.getLogger(OriginFilter.class.getName()).log(Level.SEVERE, null, ex);
} finally {
}
}
}
responseRepresentation
bir #release method
yok WARNING: A response with a 200 (Ok) status should have an entity (...)
ServerResource uygulamasının kod şudur
Diğer konulardaki çözümleri denedim ancak bunların hiçbiri işe yaramıyor gibi görünüyor. İlk olarak, iş parçacığı havuzunun warnings state that the thread pool available is 10
olarak ayarlanan parametrelerle artırıldığı görünmüyor. Daha önce de belirtildiği gibi, maxThreads
değerinin artışı sadece sonucu erteliyor gibi görünüyor.
Example: INFO: Worker service tasks: 0 queued, 10 active, 17 completed, 27 scheduled.
Restlet version
ile ilgili bazı hata olabilir, ama bu issue.The Web Servis çok değil günde yaklaşık 5000 istekleri, yaşıyor değildi doğrulamak için kararlı sürümü indirilebilir. Not:ServerResource or OriginFilter
döner hata #release method
biriyle yerleştirme ve sevk
("WARNING: A response with a 200 (Ok) status should have an entity (...)")
kılavuzluk Lütfen uyarı. Teşekkürler!