我在一个Node.JS应用程序中打开了两个快递服务器。
用例是打开2个单独的套接字以运行2个同时服务。
问题是Google Cloud或Heroku无法提供对多个端口的访问->没有单独的端口=没有单独的套接字。
有没有办法在任何云服务(如Google Cloud / AWS / Heroku)中的单个部署中打开2个服务器端口(以获得两个单独的套接字)?
还是有其他解决方法?
答案 0 :(得分:0)
有可能。在典型的MERN堆栈中,我使用concurrently
在不同端口和相同部署上并行运行React.js
应用程序和Express.js
应用程序。在这种情况下可以使用类似的设置。
以下示例已使用Google Cloud Platform的App Engine (Flexible environment)
进行了测试。假设您的项目结构如下:
~/project
|- Dockerfile
|- app.yaml
|
|- service1
|| - index.js
|| - package.json
|| ...
|
|- service2
|| - index.js
|| - package.json
|| ...
假设您的快速应用程序是使用express-generator
创建的,那么事实是,在创建时,两个应用程序都在同一端口上运行,如./service1/bin/www
和{{1 }}:./service2/bin/www
。相反,您可以使service1的bin / www保持不变,以便它继续监听var port = normalizePort(process.env.PORT || '3000');
(在本例中为8080),然后编辑process.env.PORT
,使其在您喜欢的任何特定端口上运行,而不是在其他端口上运行8080或3000,例如您想在端口3005上运行它。
接下来,您必须编辑service1的package.json,以便在./service2/bin/www
上同时运行两个应用程序。可以这样完成:
npm start
不幸的是,默认情况下并发不打包,因此此命令可能会产生无法识别的错误。这样,您可以使用一个Dockerfile,其目的是指定运行时映像以及用于部署的构建步骤(npm安装两个应用程序,并依次安装"scripts": {
"start": "concurrently \"node ./bin/www\" \"node ../service2/bin/www\""
}
和npm install -g concurrently
)
npm start
最后,提供一个FROM gcr.io/google_appengine/nodejs
COPY . /app/
RUN cd ./service1 && npm install
RUN cd ./service2 && npm install
RUN npm install -g concurrently
CMD cd ./service1 && npm start
文件,该文件将指定使用的运行时以及环境。
app.yaml