Node JS服务器处理10000个Websockets

4
我正在设计一个Node JS程序,用于开发一个实时系统,该系统在数据输入端具有10,000个套接字,在客户端应用程序方面也有一些套接字(根据客户端应用程序/ Web应用程序是否运行而动态变化)。
我将输入的数据转换成可读的输出形式。例如,模拟温度传感器读数转换为摄氏度标度。
我将在Google Cloud平台上托管此程序。
我的问题是,Node JS服务器能否并行处理以下任务: 1)注册Web套接字 2)修复/维护Web套接字 2.1)更新内存中的数据 2.2)接受传入的数据 3)转换数据 3.1)发送转换后的数据 4)每5分钟将数据转储到数据库
我的问题是,Node JS是否是适当的技术,还是我需要像Java这样的多线程技术?

是的,Node.js通常可以处理所有这些。如果您确保您的应用程序是无状态的,那么如果一个实例不够,您可以启动多个应用程序实例。但是,如果没有更多具体信息,我无法提供更多详细信息。 - Andrew Eisenberg
关于“并行”,实际上不会,因为它一次只能运行一件事情。所以要看很多其他的因素,比如数据发送频率、连接到来的频率、转换如何工作、运行在什么机器上等等,这些都需要进行测试才能确定是否能够正常工作。 - Sami Kuhmonen
1个回答

0
我的问题是Node JS是否适合技术。
简而言之,是的,Node将起作用。
像大多数现代JavaScript框架一样,Node.js支持异步编程。什么是“异步”程序?要理解“异步”的含义,最好先了解“同步”的含义。摘自Marijn Haverbeke的《Eloquent Javascript》一书,可在此处获得:
在同步编程模型中,事情一个接一个地发生。当您调用执行长时间操作的函数时,它仅在操作完成并且可以返回结果时才返回。这会停止您的程序,直到操作完成。
换句话说,操作一个接一个地发生。如果我使用同步程序在县集市上运行售票员,那么顾客1将首先被服务,然后是顾客2,然后是顾客3等等。每个排队的人都会为其他所有人增加等待时间。
异步模型允许多个操作同时进行。当您启动一个操作时,程序会继续运行。当操作完成时,程序会被通知并获得结果的访问权限。
回到售票柜台的例子,如果以异步方式完成,排队的所有人将同时被服务,而任何一个人是否有其他人在排队都没有太大意义。
希望这样说起来有意义。有了这个新想法,让我们考虑如何实现异步程序。正如之前提到的,Node确实支持异步程序,但是仅有框架的支持是不够的,您需要有意地构建异步程序。
我可以提供一些关于如何在Node中实现异步程序的深入示例,但我不确定您有哪些要求/限制。请在此回复中添加更多详细信息,我可以为您提供更多帮助。如果您需要一些入门指南,请花些时间查看promisescallback函数。

但是异步如何与问题相关呢?我不同意这里提到的异步的含义。它并不会像魔法一样同时运行所有事情,特别是在JavaScript中。 - Sami Kuhmonen
@SamiKuhmonen,我理解你的观点。你正确地区分了异步运行的操作不一定是并行运行的。异步编程不能让所有10,000个套接字神奇地同时被服务,它们需要以某种方式排队。如果一个CPU每秒只能处理一个操作,而你有100个操作,即使是异步程序也无法在一秒钟内完成所有操作;这是不可能的。 - Zachary David Saunders
在Java中,使用一个线程池来处理这6个任务,每个任务分配一个线程,这样程序结构会更加简单易懂,是不是更方便呢? - Learner_101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接