【问题标题】:How to run HTTP server, UDP Server and WebSocket Server from a single NodeJS app?如何从单个 NodeJS 应用程序运行 HTTP 服务器、UDP 服务器和 WebSocket 服务器?
【发布时间】:2017-09-12 06:22:47
【问题描述】:

由于 NodeJS 是单线程运行时平台,如何在单个 NodeJS 应用程序中并行运行以下服务器:

  1. NodeJS 的 http 服务器:服务 HTML5 应用程序
  2. WebSocket 服务器:使用在 http 服务器上打开的相同 http 连接为 HTML5 应用程序提供 WebSocket 连接。
  3. UDP 服务器:为同一台机器或其他机器/docker 容器上的其他独立运行的 NodeJS 应用程序公开服务发现端点。

我正在考虑通过使用 RxJS 以某种方式实现上述目标,但更愿意听取社区关于他们的解决方案/经验的意见。

【问题讨论】:

    标签: node.js multithreading rxjs


    【解决方案1】:

    Node.js 不是单线程的。开发人员只能访问一个线程。但实际上,node.js 是多线程的。

    专门针对您的问题,您可以在同一进程中启动多个服务器。 Socket.io getting started example 显示使用 http 服务器运行 websocket。同样的事情也可以用 UDP 来完成。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      首先,您可以在 node.js 进程中拥有任意数量的侦听服务器。只要您在处理程序中编写适当的异步代码,并且没有任何占用 CPU 的算法要运行,就可以了。

      其次,您的 webSocket 和 http 服务器可以是与 webSocket 设计工作方式完全相同的服务器进程。

      然后,您的 UDP 侦听器只需位于与您的网络服务器不同的端口上。

      node.js 的单线程方面仅适用于您的 Javascript。您可以很好地运行多个服务器侦听器。如果不同服务器上的两个请求同时进入,则稍早于另一个到达的请求将调用其处理程序,而稍晚到达的请求将排队,直到第一个处理程序完成或在等待时返回异步操作本身。这样单线程的node.js就可以处理很多请求了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        • 2012-01-18
        • 2011-01-19
        相关资源
        最近更新 更多