Vertx 3 - открытие сокета SockJS отменено - PullRequest
0 голосов
/ 07 мая 2018

Я создал новую статью, которая должна отвечать на запросы HTTP и события с мостом SockJS. На основе этого вопроса https://stackoverflow.com/questions/41516328 и руководства vert.x https://vertx.io/docs/vertx-web/java/#_sockjs я создал этот фрагмент кода:

Java:

    @Override
    public void start(Future<Void> startFuture) throws Exception {
        startHttpServer(startFuture);
        startSockJSHandler();
    }

    private void startHttpServer(Future<Void> startFuture) {
        HttpServer server = vertx.createHttpServer(new HttpServerOptions());
        server.requestHandler(req -> {
            System.out.println("[" + new Date().toString() + "] Request #" + ++requestCount);
            if (req.path().contains("http")) {
                req.response().putHeader("Access-Control-Allow-Origin", "*").end("req_num: " + requestCount);
            }
        }).listen(8080, ar -> startFuture.handle(ar.mapEmpty()));
    }

    private void startSockJSHandler() {
        Router router = Router.router(vertx);
        SockJSHandlerOptions sockJSOptions = new SockJSHandlerOptions().setHeartbeatInterval(2000);
        SockJSHandler sockJSHandler = SockJSHandler.create(vertx, sockJSOptions);
        BridgeOptions bridgeOptions = new BridgeOptions();
        bridgeOptions.addInboundPermitted(new PermittedOptions().setAddressRegex(".*")).addOutboundPermitted(new PermittedOptions().setAddressRegex(".*"));
        sockJSHandler.bridge(bridgeOptions, be -> {
            System.out.println("BRIDGE EVENT: " + be.type().toString());
        });
        router.route("/eventbus/*").handler(sockJSHandler);
    }

JavaScript-клиент Eventbus:

var sock = new SockJS('http://localhost:8080/eventbus/');

sock.onopen = function() {
  console.log('open');
  sock.send('test');
};

sock.onmessage = function(e) {
  console.log('message', e.data);
  sock.close();
};

sock.onclose = function() {
  console.log('close');
};

HTTP-запрос / ответ работает нормально, но события SockJS - нет. В модуле «Сеть» веб-браузера я вижу только один запрос SockJS (http://localhost:8080/eventbus/info). 8 секунд в состоянии ожидания), и по истечении этого времени статус меняется на «закрыто» (в конце вызывается метод onclose ()) ).

Я сделал что-то не так?

1 Ответ

0 голосов
/ 08 мая 2018

HttpServer должен делегировать запросы на Router. В противном случае ничего не происходит. Обычно он настроен на делегирование всех запросов на Router.

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

См. Основные понятия Vert.x-Web в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...