当前位置:  开发笔记 > 编程语言 > 正文

我可以代理WAR中嵌入的Golang服务器吗?

如何解决《我可以代理WAR中嵌入的Golang服务器吗?》经验,为你挑选了1个好方法。

我的客户对如何部署Web应用程序有非常严格的要求.它们要求它可以在像Tomcat这样的Java服务器中作为WAR进行部署.然而,我们的应用程序是用golang编写的,并编译成可执行服务器.

我能想到的唯一解决方案是在后台启动一个长期存在的golang进程,该进程侦听非标准端口8080,然后在java中放置某种代理,它将透明地代理所有HTTP请求和对此进程的响应.

我应该怎么做呢?我完全不熟悉Java Servlets并在后台运行这样的长时间运行的进程.

我主要担心的是,如果这样的话是标准的,

    它会影响JVM的内存使用量等吗?

    服务器是否允许我的golang进程分配所需的内存量?

    JVM能否跟踪它的处理器利用率?

有没有更好的方法呢?像某种进程间的通信机制?



1> Jan-Willem G..:

如果HTTP是Go应用程序公开的唯一API,那么您只剩下向Go发送HTTP请求的选项.是的,您可以使用a从JVM启动Go可执行文件作为子进程ProcessBuilder.但这并不是真正嵌入你的WAR.您可以使用JNI(Go绑定称为GoJVM)来调用Go from Java中的本机例程,但是您还必须对Go代码库进行大量调整.

您正在寻找的可能是一个反向代理.它在servlet /应用程序服务器中并不常用,因为这通常在负载均衡器中完成.所以通常是NGINX或httpd mod_rewrite.对于应用程序服务器,您可以使用代理Servlet.

例子:

https://github.com/mitre/HTTP-Proxy-Servlet

https://sourceforge.net/projects/j2ep/

内存占用通常并不坏,因为您基本上只连接流.JVM将能够跟踪处理器和内存利用率 - 如果实现正确并且Go可执行文件在同一服务器上运行.显然,Java特定的统计信息不再有意义,因为您只使用Java服务器作为传递.

听起来你会遇到麻烦.如果我的严格要求是可以部署到应用程序服务器的WAR-archive,我就不会接受添加到我的堆栈的另一个可执行文件.反向代理与否.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有