如何建立与基于vertx的http服务器建立的所有连接?

时间:2017-08-31 02:22:14

标签: vert.x

我有由vertx http堆栈运行的https服务器。有没有办法为所有已建立的连接获取客户端IP地址(即用于审计,安全性,监视,QoS和其他目的)。理想情况下,我希望有事件(回调)驱动的API通知已建立和已关闭的连接。我怎样才能实现它?

目前的解决方法是轮询类似于netstat的工具,但它非常不方便而且不是真正的实时(即可能错过短连接)。

2 个答案:

答案 0 :(得分:1)

Github社区的回答是:https://github.com/vert-x3/vertx-web/issues/685

您可以使用HttpServer连接处理程序并轻松管理它:

server.connectionHandler(conn -> {

  // Track conn.remoteAddress()

  conn.closeHandler(v -> {

    // Cleanup track of conn.remoteAddress()

  });
});

答案 1 :(得分:0)

在我的示例中,我将所有IP地址写入控制台。但是,当然您可以将其写入日志文件,数据库或您选择的其他位置。

    Vertx vertx = Vertx.vertx();

    // This your regular router
    Router router = Router.router(vertx);

    // We'll have two routes, just for fun
    router.route("/a").handler((ctx) -> {
        ctx.response().end("A");
    });

    router.route("/b").handler((ctx) -> {
        ctx.response().end("B");
    });


    Router filterRouter = Router.router(vertx);

    filterRouter.get().handler((ctx)->{
        System.out.println("IP is " + ctx.request().remoteAddress());
        // Forward to your actual router
        ctx.next();
    });
    filterRouter.mountSubRouter("/", router);

    vertx.createHttpServer().requestHandler(filterRouter::accept).listen(8080);