【问题标题】:pm2, node, instances and portspm2、节点、实例和端口
【发布时间】:2017-10-25 11:51:00
【问题描述】:

很抱歉,如果这个问题是针对“新手”的,但我不知道该怎么做/它是如何工作的。

1/ 我正在使用 node.js 创建一个 API,API 服务于一些前端应用程序

2/ 为了让它更健壮,我使用 pm2(很棒的产品),使用 nginx 作为代理,很好

3/ 但是我如何处理我的 node.js api 的多个实例?我看到了“集群模式”,很好,但是当我的 node.js 正在侦听单个端口(例如 8080)时发生了什么?如果我配置了 4 个进程/实例,它们就不能同时监听同一个端口啊? ...所以: pm2 在实例之间分派调用(确实充当一种代理)。

任何线索将不胜感激,它是如何工作的?

格雷格

【问题讨论】:

    标签: node.js pm2


    【解决方案1】:

    集群模式下的节点创建一个主节点,然后生成共享 TCP 连接的工作进程,因此负载基本上分布在工作人员之间。

    这是一篇漂亮的文章,详细阐述了 pm2 和节点集群 -

    https://getstream.io/blog/running-pm2-node-js-in-production-environments/

    希望对你有帮助。

    【讨论】:

    • 但是如何处理线程之间的会话变量?是自动处理还是我必须使用某些东西来处理它(memcahe 也许?)
    • 嗨,我回答我的问题:我必须自己处理会话,模式不处理会话共享,所以识别,页面之间的信息......在呼叫之间手动处理
    • 是的,必须从自己的实现中处理共享变量。我通常更喜欢 Redis 和 Mongo 的组合。这取决于用例。
    【解决方案2】:

    感谢大家的回答, 所以,根据你给我的所有提示:

    • 我必须自己处理线程之间的会话和变量,
    • pm2 集群模式才是正道
    • pm2 将在实例之间分派调用,比方说以循环方式

    案例已结束,再次非常感谢您提供的所有提示和答案,您为我节省了大量时间。

    【讨论】:

      【解决方案3】:

      您也可以使用 nginx 管理负载。这是 nginx load balance的文档

      之后,您可以使用 .env 文件中的环境变量运行具有特定端口的应用程序,并以这种方式访问​​它。例如:process.env.PORT

      之后以这种方式使用 pm2 运行应用程序

      PORT=5003 pm2 start routes.js --name app5003
      PORT=5002 pm2 start routes.js --name app5002
      PORT=5004 pm2 start routes.js --name app5004
      

      【讨论】:

        猜你喜欢
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 2018-08-07
        • 2019-12-02
        • 2021-09-15
        • 2020-07-09
        • 2017-11-17
        • 1970-01-01
        相关资源
        最近更新 更多