대용량 파일 서버 (2 백만 동시)를 만들려고 노력 중이며 많은 검색 후에 Vertx가 그러한 작업에 가장 적합하다는 것을 알았습니다. 그래서 나는이 코드 조각 해낸Vertx는 여러 파일 업로드 요청으로 속도가 느려집니다.
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;
}
}
});
}
여러 요청이 동시에이 방법을 사용하여 파일을 업로드하려고 할 때 (A 9메가바이트 파일을 1 초 걸리지 만 9메가바이트 파일의 100 일분 소요) 방법 적
업로드 프로세스가 느려집니다. 거기에 어떤 일이 동시성을 향상시키기 위해 누락 된 또는 메신저 윈도우 10에서 실행하기 때문에, 소켓 속도 제한이 있습니까? 감사
여기
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);
}
}
어떻게 그 100 개의 파일을 업로드합니까? 같은 기계를 사용하는 것일까? 그리고 Vertx는 같은 기계에서 작동합니까? 그리고 WIndows 10에 대해 언급 한 이후로, 아마도 단일 HDD를 가지고있을 수도 있습니까? –
모두 사실입니다. 그렇다면 내 하루를 행복하게 만드는 것은 무엇입니까? – Reza
플러스 모두 동일한 클라이언트를 사용하여 업로드되었습니다. – Reza