Node.js 在一个应用程序中部署两个Express服务器

Node.js 在一个应用程序中部署两个Express服务器,node.js,express,heroku,google-cloud-platform,serversocket,Node.js,Express,Heroku,Google Cloud Platform,Serversocket,我在一个Node.JS应用程序中打开了两个express服务器 用例是打开两个单独的套接字以同时运行两个服务 问题是Google Cloud或Heroku不提供对多个端口的访问->没有单独的端口=没有单独的套接字 在任何云服务(如Google cloud/AWS/Heroku)中,有没有一种方法可以在一次部署中打开两个服务器端口(以获得两个单独的套接字) 或者还有其他解决办法吗?这是可能的。在典型的MERN堆栈中,我曾经在不同端口和同一部署上并行运行我的React.js应用程序和Express.

我在一个Node.JS应用程序中打开了两个express服务器

用例是打开两个单独的套接字以同时运行两个服务

问题是Google Cloud或Heroku不提供对多个端口的访问->没有单独的端口=没有单独的套接字

在任何云服务(如Google cloud/AWS/Heroku)中,有没有一种方法可以在一次部署中打开两个服务器端口(以获得两个单独的套接字)


或者还有其他解决办法吗?

这是可能的。在典型的MERN堆栈中,我曾经在不同端口和同一部署上并行运行我的
React.js
应用程序和
Express.js
应用程序。在这种情况下,可以使用类似的设置

下面的示例已经使用Google云平台的

假设您有这样一个项目结构:

~/project
|- Dockerfile
|- app.yaml
| 
|- service1
|| - index.js
|| - package.json
|| ...
|
|- service2
|| - index.js
|| - package.json
|| ...
假设您的express应用程序是使用创建的,那么在创建时,两个应用程序都运行在相同的端口上,如
/service1/bin/www
/service2/bin/www
var port=normalizePort(process.env.port | |“3000”)中的这一特定行所示。相反,您可以保持service1的bin/www不变,以便它继续侦听
process.env.PORT
,在本例中,它将是8080,而可以编辑
/service2/bin/www
,以便它在您喜欢的任何特定端口上运行,而不是8080或3000,例如,您希望在端口3005上运行它

接下来,您必须编辑service1的package.json,以便在
npm start
上,它将在各自的端口上同时运行这两个应用程序。可以这样做:

~/project
|- Dockerfile
|- app.yaml
| 
|- service1
|| - index.js
|| - package.json
|| ...
|
|- service2
|| - index.js
|| - package.json
|| ...
“脚本”:{
“开始”:“并发”节点。/bin/www\“节点../service2/bin/www\”
}
不幸的是,默认情况下不会打包并发,因此此命令可能会产生无法识别的错误。因此,您可以使用Dockerfile,其目的是指定运行时映像以及部署的构建步骤(npm同时安装两个应用程序和
npm install-g,然后是
npm start

最后,提供一个
app.yaml
文件,该文件将指定所使用的运行时以及环境

runtime: custom
env: flex

这是可能的。在典型的MERN堆栈中,我曾经在不同端口和同一部署上并行运行我的
React.js
应用程序和
Express.js
应用程序。在这种情况下,可以使用类似的设置

下面的示例已经使用Google云平台的

假设您有这样一个项目结构:

~/project
|- Dockerfile
|- app.yaml
| 
|- service1
|| - index.js
|| - package.json
|| ...
|
|- service2
|| - index.js
|| - package.json
|| ...
假设您的express应用程序是使用创建的,那么在创建时,两个应用程序都运行在相同的端口上,如
/service1/bin/www
/service2/bin/www
var port=normalizePort(process.env.port | |“3000”)中的这一特定行所示。相反,您可以保持service1的bin/www不变,以便它继续侦听
process.env.PORT
,在本例中,它将是8080,而可以编辑
/service2/bin/www
,以便它在您喜欢的任何特定端口上运行,而不是8080或3000,例如,您希望在端口3005上运行它

接下来,您必须编辑service1的package.json,以便在
npm start
上,它将在各自的端口上同时运行这两个应用程序。可以这样做:

~/project
|- Dockerfile
|- app.yaml
| 
|- service1
|| - index.js
|| - package.json
|| ...
|
|- service2
|| - index.js
|| - package.json
|| ...
“脚本”:{
“开始”:“并发”节点。/bin/www\“节点../service2/bin/www\”
}
不幸的是,默认情况下不会打包并发,因此此命令可能会产生无法识别的错误。因此,您可以使用Dockerfile,其目的是指定运行时映像以及部署的构建步骤(npm同时安装两个应用程序和
npm install-g,然后是
npm start

最后,提供一个
app.yaml
文件,该文件将指定所使用的运行时以及环境

runtime: custom
env: flex

好吧,您可以使用NGINX或一些反向代理来完成这项工作。您甚至可以查看http代理中间件
节点模块您需要指定您正在使用的谷歌云服务。例如,Compute Engine与App Engine.AFAIK非常不同,您可以使用NGINX或某种反向代理来实现这一点。您甚至可以查看http代理中间件
节点模块您需要指定您正在使用的谷歌云服务。例如,Compute Engine与App Engine非常不同。在您的情况下,只有service1可以从外部访问。服务2仅在本地工作,并且只能由服务1访问。我说得对吗?@guillaumeblaquiere你说得对,Guillaume。在制定此答案时,我没有考虑到这一点,因为此方法主要用于部署React+Express应用程序,而不是Express 2x应用程序。使用此方法,每个请求都必须通过service1,因此访问service2仍然需要某种来自service1的路由,这将破坏让2个express服务并行运行的全部目的。尽管如此,我认为它应该给OP一些想法,让他可以根据这些想法创建一个适合他的解决方案。在您的情况下,只有服务1可以从外部访问。服务2仅在本地工作,并且只能由服务1访问。我说得对吗?@guillaumeblaquiere你说得对,Guillaume。在制定此答案时,我没有考虑到这一点,因为此方法主要用于部署React+Express应用程序,而不是Express 2x应用程序。使用此方法,每个请求都必须通过service1,因此访问service2仍然需要某种来自service1的路由,这将破坏运行2个express服务的全部目的