我需要部署到仅支持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端口而不会遇到端口冲突?
谢谢
答案 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上运行。