首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以代理嵌入在WAR中的Golang服务器吗?

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

Stack Overflow用户
提问于 2016-08-12 15:24:06
回答 2查看 825关注 0票数 10

我的客户对如何部署web应用程序有非常严格的要求。他们要求将其部署为像Tomcat这样的Java服务器中的WAR。然而,我们的应用程序是用golang编写的,并编译成可执行的服务器。

--我能想到的唯一解决方案是--在后台启动一个长期存在的golang进程,在非标准端口(如8080 )上侦听,然后在java中添加某种代理,透明地代理所有HTTP请求和对该进程的响应。

--我应该如何实现它? --我对Java一点也不熟悉,并且在后台运行像这样的长时间运行的进程。

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

  1. 它会影响JVM的内存使用等吗?
  2. 服务器是否允许我的golang进程分配所需的内存量?
  3. JVM能够跟踪它的处理器利用率吗?

有什么更好的方法吗?就像某种进程间的交流机制?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-16 20:49:11

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

您可能正在寻找的确实是一个反向代理。在servlet/应用程序服务器中不经常这样做,因为这通常是在负载平衡器中完成的。因此,通常情况下,这将是NGINX或httpd与mod_rewrite。对于应用服务器,可以使用代理servlet。

示例:

内存占用通常不会太坏,因为您实际上只是连接流。JVM将能够跟踪处理器和内存的使用情况--如果实现得当,并且Go可执行文件在同一台服务器上运行。显然,Java特定的统计信息不再有什么意义了,因为您只使用Java服务器作为传递。

听起来你会有麻烦的。如果我的严格要求是可以部署到应用服务器上的WAR存档,我不会接受添加到我的堆栈中的另一个可执行文件。反向代理与否。

票数 5
EN

Stack Overflow用户

发布于 2016-08-22 20:13:42

如果他们想要战争,就给他们战争!

编写一个瘦层web服务,其中嵌入可执行文件作为资源,执行该服务以打开go服务器并接受web调用,并将其传递到go服务。

我听你说什么都没有吗?好吧,他们的武断要求可能也不是由长期离开公司的人提出的,也不是因为他们缺乏在操作上处理其他形式的部署的信心/经验/知识。除了建立适当的操作程序所需的工作(懒惰)外,没有特别好的理由拒绝部署您的服务。

只要遵守他们的规则的文字,而不是精神,当被问到你的执行情况时要诚实。他们不会介意的。

这听起来像是一种咆哮,但是IMHO和经验,这种方法是现实的,而需求的驱动因素是基于情感的,所以有必要给出一个情感上的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38921437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档