我对这类东西很陌生,但最近我听到了很多关于Node.js有多好的消息。考虑到我非常喜欢使用jQuery和JavaScript,我不禁想知道如何决定何时使用Node.js。

从过去几天我做的所有作业中,我得到了以下信息。节点.js

是一个命令行工具,可以作为常规web服务器运行,并允许运行JavaScript程序利用了出色的V8 JavaScript引擎当你需要同时做几件事时是基于事件的,所以所有类似Ajax的精彩内容都可以在服务器端完成让我们在浏览器和后端之间共享代码让我们谈谈MySQL

我遇到的一些来源是:

深入Node.js–介绍和安装了解NodeJS按示例列出的节点(存档.is)让我们制作一个Web应用程序:NodePad

考虑到Node.js几乎可以在Amazon的EC2实例上开箱即用,我试图了解Node.js需要什么类型的问题,而不是PHP、Python和Ruby等强大的王者。我知道这确实取决于一个人对语言的专业知识,但我的问题更多地属于一般范畴:什么时候使用特定的框架,它特别适合什么类型的问题?


当前回答

最适合并发请求处理的节点-

那么,让我们从一个故事开始。在过去的两年里,我一直致力于JavaScript和开发web前端,我很喜欢它。后端的家伙们为我们提供了一些用Java、python编写的API(我们不在乎),我们只需编写一个AJAX调用,获取数据,然后猜一猜!我们完成了。但实际上,这并不是那么容易,如果我们获取的数据不正确或存在服务器错误,那么我们就卡住了,我们必须通过邮件或聊天联系我们的后端人员(有时也在whatsApp上:)这不酷。如果我们用JavaScript编写API并从前端调用这些API呢?是的,这很酷,因为如果我们在API中遇到任何问题,我们可以调查它。猜猜看!你现在可以这样做了,怎么做节点就在那里。

Ok同意您可以用JavaScript编写API,但如果我对上述问题没有异议,该怎么办。您还有其他理由使用node for rest API吗?

这就是魔法的开始。是的,我确实有其他理由将节点用于我们的API。

让我们回到传统的rest API系统,它基于阻塞操作或线程。假设发生两个并发请求(r1和r2),每个请求都需要数据库操作。因此,在传统系统中会发生什么:

1.等待方式:我们的服务器开始服务r1请求并等待查询响应。r1完成后,服务器开始为r2服务,并以相同的方式执行。所以等待不是一个好主意,因为我们没有那么多时间。

2.线程方式:我们的服务器将为两个请求r1和r2创建两个线程,并在查询数据库后达到它们的目的,速度非常快。但这会消耗内存,因为您可以看到,我们启动了两个线程。当两个请求都在查询同一数据时,问题也会增加,因此您必须处理死锁问题。所以这比等待要好,但问题仍然存在。

现在,节点将如何执行此操作:

3.Nodeway:当同一个并发请求进入节点时,它将使用回调注册一个事件,并继续前进,它不会等待特定请求的查询响应。因此,当r1请求到来时,节点的事件循环(是的,节点中有一个事件循环用于此目的)。)使用其回调函数注册事件,并继续服务r2请求,同样,使用回调函数注册其事件。每当任何查询完成时,它都会触发相应的事件,并在不中断的情况下执行回调以完成。

所以,无需等待,无需线程,无需内存消耗——是的,这是服务rest API的节点方式。

其他回答

我为新项目选择Node.js的另一个原因是:

能够进行纯云开发

我使用Cloud9IDE已经有一段时间了,现在我无法想象没有它,它涵盖了所有的开发生命周期。你只需要一个浏览器,你可以随时随地在任何设备上进行编码。您不需要在一台计算机(如在家中)中签入代码,然后在另一台计算机中签出(如在工作场所)。

当然,可能有其他语言或平台的基于云的IDE(cloud 9 IDE也增加了对其他语言的支持),但使用cloud 9进行Node.js开发对我来说真的是一种很棒的体验。

我认为没有人提到Node.js的另一个伟大之处是它的社区、包管理系统(npm)以及存在的模块数量,只需将它们包含在package.json文件中即可。

我的作品:nodejs非常适合制作实时系统,如分析、聊天应用程序、api、广告服务器等。见鬼,我用nodejs和socket.io制作了我的第一个聊天应用程序,时间不到2小时,考试期间也是如此周

Edit

我开始使用nodejs已经好几年了,我用它制作了很多不同的东西,包括静态文件服务器、简单分析、聊天应用等等。这是我对何时使用nodejs的看法

何时使用

在制作强调并发性和速度的系统时。

仅套接字服务器,如聊天应用程序、irc应用程序等。社交网络强调实时资源,如地理位置、视频流、音频流等。处理小数据块的速度非常快,就像一个分析Web应用程序。作为公开仅REST api。

何时不使用

它是一个非常多功能的Web服务器,因此您可以在任何地方使用它,但可能不是这些地方。

简单的博客和静态网站。就像静态文件服务器一样。

记住,我只是吹毛求疵。对于静态文件服务器,apache更好,主要是因为它广泛可用。多年来,nodejs社区已经变得越来越大,越来越成熟,如果您有自己的托管选择,可以放心地说nodejs几乎可以在任何地方使用。

我可以分享一些使用node js的地方和原因。

对于聊天、协作编辑等实时应用程序,我们最好使用nodejs,因为它是从服务器向客户端发送事件和数据的事件库。简单易懂,因为它是大多数人都知道的javascript基础。当前的大多数web应用程序都倾向于使用angular js和主干,使用节点很容易与客户端代码交互,因为两者都将使用json数据。有很多插件可用。

缺点:-

节点将支持大多数数据库,但最好的是mongodb,它不支持复杂的连接和其他。编译错误。。。开发人员应该以其他方式处理每一个异常,如果任何error accord应用程序将停止工作,我们需要再次手动或使用任何自动化工具启动它。

结论:-Nodejs最适合用于简单和实时应用程序。。如果您有非常大的业务逻辑和复杂的功能,最好不要使用nodejs。如果您想构建一个应用程序以及聊天和任何协作功能。。节点可以用在特定的部件中,并保留下来。

你总结了Node.js的优点,做得很好。我的感觉是,Node.js特别适合那些希望保持浏览器与服务器之间持久连接的应用程序。使用称为“长轮询”的技术,您可以编写一个实时向用户发送更新的应用程序。在Ruby on Rails或Django等网络巨头上进行长时间的轮询会给服务器带来巨大的负载,因为每个活动客户端都会消耗一个服务器进程。这种情况相当于停机坪袭击。当您使用Node.js之类的东西时,服务器不需要为每个打开的连接维护单独的线程。

这意味着您可以在Node.js中创建一个基于浏览器的聊天应用程序,它几乎不需要系统资源就可以为大量客户机提供服务。任何时候你想做这种长轮询,Node.js都是一个很好的选择。

值得一提的是,Ruby和Python都有做这类事情的工具(分别是eventmachine和twisted),但Node.js从一开始就做得非常好。JavaScript非常适合基于回调的并发模型,并且在这里表现出色。此外,能够使用客户端和服务器上的JSON进行序列化和反序列化是非常不错的。

我期待着在这里阅读其他答案,这是一个很棒的问题。

值得指出的是,Node.js也非常适合在客户机/服务器之间重用大量代码的情况。Meteor框架使这变得非常简单,许多人都认为这可能是web开发的未来。根据经验,我可以说在Meteor中编写代码非常有趣,其中很大一部分是花更少的时间思考如何重组数据,这样浏览器中运行的代码就可以轻松地处理数据并将其传递回去。

这是一篇关于金字塔和长轮询的文章,事实证明,在gevent:TicTacToe和长轮询与金字塔的帮助下,这很容易设置。