Ich versuche, einen großen Dateiserver (2 Millionen gleichzeitig) zu erstellen und nach vielen Suchen fand ich heraus, dass Vertx am besten für solche Aufgaben ist. So kam ich mit diesem Stück Code bisVertx verlangsamt mit mehreren Datei-Upload-Anfragen
public void uploadFile(Vertx vertx,RoutingContext ctx,String targetFilePath,FileUploadListener mListener) {
ctx.request().pause();
new File(targetFilePath).getParentFile().mkdirs();
vertx.fileSystem().open(targetFilePath, new OpenOptions(), new Handler<AsyncResult<AsyncFile>>() {
@Override
public void handle(AsyncResult<AsyncFile> arg0) {
try {
AsyncFile file = arg0.result();
if(file == null) {
Logger.Log("file null");
mListener.onFail();
return;
}
Pump pump = Pump.pump(ctx.request(), file);
ctx.request().endHandler(v1 -> file.close(v2 -> {
mListener.onSuccess(new File(targetFilePath));
}));
pump.start();
ctx.request().resume();
}catch (Exception e) {
e.printStackTrace();
Logger.Log(e);
mListener.onFail();
return;
}
}
});
}
, wie immer, wenn mehrere Anforderungen versuchen, eine Datei mit dieser Methode (dauert 1 Sekunde für eine 9mb Datei, aber dauert nur 1 Minute für 100 von 9mb Dateien) gleichzeitig laden die Upload-Prozess verlangsamt. Gibt es etwas, das fehlt für die Verbesserung der Gleichzeitigkeit oder seit ich dies auf Windows 10 ausführen, hat eine Steckdose eine solche Geschwindigkeitsbegrenzung? Dank
hier ist mein MainVerticle
public class MainDeployment extends AbstractVerticle{
private Router router = Router.router(vertx);
@Override
public void start() throws Exception {
//GUI.display("Sub Verticle Has Deployed");
// Different ways of deploying verticles
// Deploy a verticle and don't wait for it to start
for(Entry<String, MyHttpHandler> entry : MyVertxServer.map.entrySet()){
router.route(entry.getKey()).handler(new Handler<RoutingContext>() {
@Override
public void handle(RoutingContext ctx) {
System.out.println(ctx.request().uri());
String[] handlerID = ctx.request().uri().split(ctx.currentRoute().getPath());
String suffix = handlerID.length > 1 ? handlerID[1] : null;
entry.getValue().Handle(ctx, new VertxUtils(), suffix);
}
});
}
MyVertxServer.server.requestHandler(router::accept);
}
}
Ich frage mich, wie Sie diese 100 Dateien hochladen. Vielleicht mit der gleichen Maschine? Und läuft Ihr Vertx auf demselben Rechner? Und da Sie Windows 10 erwähnt haben, vielleicht haben Sie sogar einzelne HDD? –
alles wahr :), bedeutet es also etwas, das meinen Tag glücklich macht? – Reza
plus alle mit demselben Kunden hochgeladen werden – Reza