在Tomcat上部署Vert.x.

时间:2016-04-05 17:13:24

标签: java tomcat java-ee vert.x

我需要部署到仅支持Tomcat容器的PaaS(HANA云平台),并且还希望将Vert.x作为异步框架运行。

到目前为止我所做的是通过servlet引导Vert.x:

import matplotlib.pyplot as plt
import time

def ShowGraph():
    n = 2
    j = 1
    while j <= 10:
        x = [i for i in range(n)]
        y = [i for i in range(n)]
        plt.plot(x, y, 'r-')
        plt.ylim([0, 10])
        plt.xlim([0, 10])
        if j > 1:
            plt.draw()
        else:
            plt.show(block=False)
        time.sleep(1)
        n += 1
        j += 1

ShowGraph()

在我的web.xml中,我把它放在:

public class VertxServlet extends HttpServlet {
...
    @Override
    public void init(ServletConfig cfg) {

        Vertx vertx = Vertx.vertx();
        vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
            public void handle(HttpServerRequest req) {
              System.out.println("Got request: " + req.uri());
              System.out.println("Headers are: ");
              for (Map.Entry<String, String> entry : req.headers()) {
                System.out.println(entry.getKey() + ":" + entry.getValue());
              }
              req.response().headers().set("Content-Type", "text/html; charset=UTF-8");
              req.response().end("<html><body><h1>Hello from vert.x!</h1></body></html>");
            }
          }).listen(8888);
    }
...
}

效果很好。问题是PaaS无法配置端口映射。包括反向代理在内的整个Tomcat是一个准备好的解决方案。

问题:

  • 将Vert.x作为<servlet> <servlet-name>VertxServlet</servlet-name> <display-name>VertxServlet</display-name> <description></description> <servlet-class>com.mypackage.VertxServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> 文件运行是否可行?或者这样做 有什么限制和困难可能会在以后发生?

  • 有没有办法将我的小Vert.x服务器绑定到默认的Tomcat端口而不会遇到端口冲突?

谢谢

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。有一个HTTP代理Servlet,您可以轻松地将HTTP请求转发到Vert.x套接字:https://github.com/mitre/HTTP-Proxy-Servlet它适用于HTTP。

但不幸的是,这个解决方案不支持Web套接字。

答案 1 :(得分:0)

据我了解,您将遇到端口绑定问题,在与tomcat相同的端口上运行。

不是在tomcat中运行vert.x,也许你应该考虑在tomcat前面运行vert.x,并且如果请求的目的地是tomcat,则从vert.x到tomcat的代理请求。这将允许您利用vert.x异步来处理发往vert.x的请求。如果你以另一种方式做到这一点,我想你会失去一些vert.x善良。如果你有额外的内存,你可能想考虑在2 jvm上运行。