Поток Vertx HTTP -сервера был заблокирован для XXXX MS, срок - 2000JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Поток Vertx HTTP -сервера был заблокирован для XXXX MS, срок - 2000

Сообщение Anonymous »

Я написал крупномасштабный HTTP-сервер с помощью Vertx, но я получаю эту ошибку, когда количество одновременных запросов увеличивается < /p>

Код: Выделить всё

WARNING: Thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 8458 ms, time limit is 1000
io.vertx.core.VertxException: Thread blocked
< /code>
Вот мой полный код: < /p>
public class MyVertxServer {

public Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(100));
private HttpServer server = vertx.createHttpServer();
private Router router = Router.router(vertx);

public void bind(int port){

server.requestHandler(router::accept).listen(port);

}

public void createContext(String path,MyHttpHandler handler){

if(!path.endsWith("/")){
path += "/";
}

path+="*";

router.route(path).handler(new Handler() {

@Override
public void handle(RoutingContext ctx) {

String[] handlerID = ctx.request().uri().split(ctx.currentRoute().getPath());

String suffix = handlerID.length > 1 ? handlerID[1] : null;
handler.Handle(ctx, new VertxUtils(), suffix);

}
});
}

}
< /code>
и как я его называю: < /p>
    ver.createContext("/getRegisterManager",new ProfilesManager.RegisterHandler());
ver.createContext("/getLoginManager", new ProfilesManager.LoginHandler());
ver.createContext("/getMapcomCreator",new ItemsManager.MapcomCreator());
ver.createContext("/getImagesManager", new ItemsManager.ImagesHandler());

ver.bind(PORT);
Тем не менее, я не нахожу eventbus () полезно для серверов http, которые процесс отправляют/получают файлы, потому что вам необходимо отправить routingcontext в сообщении, которое невозможно. Спасибо < /p>
Добавить немного кода обработчика: < /p>

Код: Выделить всё

  class ProfileGetter implements MyHttpHandler{

@Override
public void Handle(RoutingContext ctx, VertxUtils utils, String suffix) {

String username = utils.Decode(ctx.request().headers().get("username"));
String lang = utils.Decode(ctx.request().headers().get("lang"));

display("profile requested : "+username);

Profile profile = ProfileManager.FindProfile(username,lang);

if(profile == null){
ctx.request().response().putHeader("available","false");
utils.sendResponseAndEnd(ctx.response(),400);
return;
}else{
ctx.request().response().putHeader("available","true");
utils.writeStringAndEnd(ctx, new Gson().toJson(profile));
}

}

}
здесь Profilemanager.findprofile (username, lang) выполняет задание на давно выполняющуюся базу данных в одном и том же потоке
...образно в Vertx параллель

Подробнее здесь: https://stackoverflow.com/questions/394 ... it-is-2000
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»