2018.11.07 17:22

您可以使用Node.js构建的6种类型的应用程序


Node.js是一个基于事件驱动编程的JavaScript运行时环境,它支持非阻塞I / O(输入/输出),能够在单个线程中提供多个并发事件。非阻塞I / O使Node.js在处理数据繁重和I / O繁重的工作负载时非常快速,轻量,可扩展且高效,这些工作负载是几种类型的Web应用程序的特征。在本文中,我们将展示Node.js可以在多种应用程序中有效使用,我们将展示六种最流行的解决方案,包括物联网应用程序,围绕微服务架构构建的应用程序,实时聊天,实时协作工具,流媒体应用程序和单页应用程序(SPA)。



1.物联网

IoT(物联网)是一个设备网络,如传感器,信标,执行器,以及嵌入电子设备的任何其他项目,使他们能够发送和交换数据。通常,物联网系统将数据从设备传递到服务器,从服务器传递到处理它的应用程序并将其显示给用户。物联网可能包含数千个这样的设备,这使得管理设备之间和设备之间的请求和数据流变得具有挑战性。

自2012年以来,当物联网的普及率大幅提升时,Node.js已成为寻求开发其私有和公共物联网系统的企业和组织的首选解决方案之一。Node.js作为此类网络的后端的最明显的优势是它能够处理网络上数千甚至数百万设备发出的多个并发请求和事件。来自IoT设备的大量请求和数据不会阻止Node.js服务器,这要归功于它们的事件驱动架构和异步处理,适用于IoT网络上的I / O繁重操作。这使Node.js快速成为这些设备和用于存储源自它们的数据的数据库之间的应用程序层。

image1-15.png

此外,在数据密集型场景中工作的物联网开发人员可以利用Node.js的低资源需求。低内存要求允许将Node.js作为软件轻松集成到单板控制器中,例如Arduino,广泛用于构建构成物联网系统的数字设备。最后,Node社区一直是物联网技术的早期采用者,为Arduino控制器创建了80多个包,为物联网系统中广泛使用的Pebble和Fitbit可穿戴设备创建了多个包。

物联网Node.js生态系统的成熟解释了为什么环境已成功用于许多物联网产品。例如,Skycatch在其专用无人机中使用Node.js,这些无人机拍摄建筑工地的照片并将其转换为启动建筑项目所需的3D模型和数据。Node.js还成功应用于西门子智能电网(Monet)等商业产品,这是一种旨在节省能源资源并检测能源使用异常和潜在危险的电源管理解决方案。Monet使用Node.js作为应用程序层,使用MongoDB进行数据存储,这两者都托管在Microsoft Azure云中。


2.实时聊天

实时聊天是任何在线通信工具,可以实现从发送者到接收者的文本,视频或音频消息的实时传输。实时聊天可以采用基于即时消息(IM)或互联网中继聊天(IRC)技术的一对一或一对多群聊的形式。目前,实时聊天广泛用于社交网络,商业网站以及网络上的各个地方。

Node.js提供了构建任何复杂性的实时聊天的所有基本功能。特别是,Node具有强大的事件API,有助于创建某些类型的对象(“发射器”),这些对象定期发出由事件处理程序“监听”的命名事件。借助此功能,Node.js可以轻松实现服务器端事件和推送广泛用于即时消息传递和其他实时应用程序的通知。

Node的基于事件的体系结构也适用于WebSockets协议,该协议有助于通过一个开放连接在客户端和服务器之间进行快速的双向消息交换。通过在服务器和客户端安装WebSockets库,您可以实现比大多数其他更传统的解决方案更低的开销和延迟以及更快的数据传输的实时消息传递。

在Node中,您可以通过诸如socket.io,ws或websocket-node之类的库对WebSockets提供出色的支持,因此您可以轻松地部署高效的实时聊天和应用程序。例如,使用socket.io,创建基本实时聊天所需要做的就是在服务器和客户端上安装socket.io库,并创建将通过WebSocket打开连接推送消息的事件发射器和广播器。只需几行代码即可实现这一基本功能。


3.复杂的单页应用程序

单页面应用程序(SPA)是一种流行的Web开发方法,其中整个应用程序适合单个页面,目标是提供类似于桌面应用程序的用户体验。

在SPA中,所有客户端脚本都加载到单个HTML页面中,该页面作为应用程序的主入口点,而所有部分视图都按需加载到此中央模板中。同时,后台AJAX请求确保应用程序更新,而无需进行完整页面重新加载,这使您感觉好像使用的是桌面应用程序。

目前,SPA广泛用于创建社交网络应用程序,在线绘图和文本工具等等。SPA的典型示例是Gmail,其AJAX驱动的新到达消息的无缝更新。

Node.js非常适合SPA,因为它可以有效地处理异步调用和这些应用程序特有的繁重I / O工作负载。Node.js的事件循环允许“延迟”来自客户端的多个并发请求,这确保了视图之间的平滑过渡和无缝数据更新。此外,Node.js适用于数据驱动的SPA,其中服务器充当向客户端提供数据的后端,而客户端则执行所有HTML呈现。

通过NPM存储库提供Express等框架,您可以将Node.js转换为REST API,从特定路由流式传输数据和服务。这种方法有助于减少服务器的负载,同时确保跨不同应用程序和环境的API共享。在这种情况下,Node.js只返回索引页面(index.html),而数据将通过REST接口和服务器端实现的控制器发送。从设计的角度来看,这种方法将确保模型,控制器和视图之间的关注点(SoC)与服务器端实现的所有数据相关服务明确分离。

最后,Node.js适用于SPA,因为它与用于构建SPA的许多流行的JavaScript框架(Ember,Meteor,React,Angular)使用相同的语言(JavaScript)编写。由于Node.js和浏览器都使用JavaScript,因此它们之间的上下文切换较少,开发人员可以在服务器端和客户端使用相同的数据和语言结构以及模块化方法。这样可以加快SPA的开发速度并提高可维护性。Node.js的上述优点已经被Netflix,Linkedin和Medium这样的着名SPA所利用,仅举几例。


4.实时协作工具

实时协作应用程序提供各种软件解决方案,用于共同浏览,项目管理,视频和音频会议,应用程序共享,文档协作编辑等。在最着名的协作应用程序中,应该提到Slack用于群组聊天和远程团队管理,Trello用于项目管理,以及Google Docs用于集体编辑文档。

与实时聊天一样,Node的异步和基于事件的架构非常适合协作应用程序。在这些应用程序中,许多事件和I / O请求同时发生。例如,多个用户可以编辑相同的段落,评论,发布消息和附加媒体。对一条内容的更改可能仅在一系列事件之后应用,其中每一步都取决于前一步。

Node的WebSockets和Event API将确保许多用户执行繁重的I / O操作不会使服务器挂起,并且所有服务器端事件和数据都会按时发送回客户端。通过向客户端发送推送通知,Node.js还将立即更新协作环境,以便所有用户都具有应用程序的单一且连贯的表示。这正是项目管理应用程序Trello团队使用Node.js堆栈的原因。Trello的工程团队认为Node.js非常适合立即传播大量更新并保持大量开放连接,这要归功于它的事件驱动和非阻塞架构。在Node.js上构建的其他实时协作应用程序中,我们还应该提到Yammer,


5.流媒体应用

与远程服务器应用程序不同,在应用程序流中,程序在最终用户的本地计算机上执行。应用程序流允许按需下载部分应用程序,而不会使服务器和本地计算机过载。最初,只下载引导程序所需的应用程序的某些部分,而其余部分可以在后台下载(如果需要)。完全下载应用程序后,它可以在没有任何网络连接的情况下运行。如果您想在帐户中保存一些数据,应用程序可以启动服务器请求。同样,服务器事件可以更新本地应用程序而不会产生太多的网络流量开销

Node.js非常适合开发此类流应用程序,这归功于它的原生Stream API。特别地,Node.js具有可读和可读流的接口,可以非常有效地处理和监视。流实例基本上是Unix管道,允许将应用程序可执行代码的一部分传输到本地计算机,同时保持连接打开,以便按需下载新组件。Streams允许用户相互管道请求,并将数据直接传输到其最终目的地。作为奖励,流不需要缓存和临时数据 - 只是一个开放的连接,可以将应用程序数据从一个地方传输到另一个地方。


6.微服务架构

微服务架构是一种将应用程序开发为一组独立,小型和模块化服务的方法,每个服务都运行一个独特的流程,并在业务逻辑中发挥特定作用。通常,微服务通过HTTP / REST协议与JSON或其他数据结构进行通信。近年来,微服务架构已经成为非常受欢迎的许多主要应用程序,如Netflix,Facebook,亚马逊和eBay,它们已经从单片应用程序演变为一套微服务。

Node.js是一个很好的解决方案,用于开发微服务并创建易于使用的API来连接它们。特别是,Node.js存储库具有Express和Koa框架,可以轻松地为每个微服务安装多个服务器实例并为它们设计路由地址。带有Express的Node.js允许创建高度灵活的模块,负责应用程序的特定部分。

此外,Node.js可以轻松地与Docker集成,因此允许您将微服务封装在密封容器中,以避免在每个容器中使用的应用程序开发环境之间发生任何冲突。将Node.js用于微服务也可以从Node的轻量级要求中受益。具有微服务的Node.js显着缩短了应用程序部署时间,并提高了应用程序的效率,可维护性和可伸缩性。微服务架构还有助于有效管理工程团队中的分工,使他们能够处理特定任务,而不会影响应用程序的其他部分。

世界领先的在线支付系统PayPal成功地利用了这些优势,自2013年以来,它一直使用Node.js为其微服务架构提供支持.PayPal模块化其应用程序堆栈并将开发过程分解为许多微服务,从而组织他们的团队工作对他们更有效率。PayPal能够扩展Node.js,以便多个团队可以在同一个项目上工作。这种转变的结果令人震惊。PayPal的Node.js应用程序的构建速度可以提高两倍,人数也会减少。该公司已经设法减少其代码库并提高性能,其中单个核心节点应用程序可以处理比之前PayPal使用的5个Java应用程序多两倍的rps(每秒请求数)。


包起来

总而言之,Node.js非常适合构建具有大量客户端呈现,多个并发请求以及从客户端到服务器的频繁数据混乱的应用程序。每当您考虑构建繁重的I / O和数据驱动的应用程序时,Node.js绝对应该是您列表中的第一个选项。也就是说,Node.js不适合开发涉及图像,音频或视频的生成和处理的CPU密集型应用程序。作为单线程解决方案,Node.js可能会变得无响应并且在处理大型文件时变得缓慢。在这种情况下,传统的多线程解决方案将是您最好的选择。

DIY表情

(添加http或https协议)

提交评论

留言区 1

  1. 1
    为你加油!!!!!!  ☆ * .  ☆   . ∧_∧ ∩ * ☆ * ☆ ( ・∀・)/ .  . ⊂   ノ* ☆ ☆ * (つ ノ .☆    (ノ