【问题标题】: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 应用程序中并行运行以下服务器:
- NodeJS 的 http 服务器:服务 HTML5 应用程序
- WebSocket 服务器:使用在 http 服务器上打开的相同 http 连接为 HTML5 应用程序提供 WebSocket 连接。
- UDP 服务器:为同一台机器或其他机器/docker 容器上的其他独立运行的 NodeJS 应用程序公开服务发现端点。
我正在考虑通过使用 RxJS 以某种方式实现上述目标,但更愿意听取社区关于他们的解决方案/经验的意见。
【问题讨论】:
标签:
node.js
multithreading
rxjs
【解决方案2】:
首先,您可以在 node.js 进程中拥有任意数量的侦听服务器。只要您在处理程序中编写适当的异步代码,并且没有任何占用 CPU 的算法要运行,就可以了。
其次,您的 webSocket 和 http 服务器可以是与 webSocket 设计工作方式完全相同的服务器进程。
然后,您的 UDP 侦听器只需位于与您的网络服务器不同的端口上。
node.js 的单线程方面仅适用于您的 Javascript。您可以很好地运行多个服务器侦听器。如果不同服务器上的两个请求同时进入,则稍早于另一个到达的请求将调用其处理程序,而稍晚到达的请求将排队,直到第一个处理程序完成或在等待时返回异步操作本身。这样单线程的node.js就可以处理很多请求了。