NodeJs的优势和适合开发的程序

很多同学可能都听说过nodejs,并且知道他是可以运行在服务器上的javascript,但是他的使用场景可能大家并不是很清楚,最近也在看学习nodejs,就做了一下小总结;

NodeJs的优势:

现在的很多的服务器端的语言(PHP,JAVA,ASP.net),有什么问题呢,现在的服务器端的语言在用户访问服务器时,为每个用户链接创建了一个线程,但每个线程大约要耗费2M的内存,如果一个8G内存的服务器,也就能链接4000个左右的用户,如果用户的链接数较大,就必须增加服务器的数量,而且现在用户的链接方式有很多(如app,网页同时访问),这就又涉及到服务器共享的问题,所以服务器怎么支持最大的同时链接用户量就成了一个问题;

NodeJS修改了客户端到服务器端的链接方法,解决了这个问题,他不在为每个客户端创建一个新的线程,而是为每个客户端链接出发一个NodeJs内部进行处理的事件,所以NodeJS具备同时处理多达几万个用户的客户端链接的能力;

NodeJS适合开发的应用程序:

当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,我们应该考虑使用NodeJs来进行应用程序的开发,例如:

1、聊天服务器:如果聊天的人很多,用户的与服务器之间的并发链接量很大,但是服务器端的数据处理并不复杂;

2、综合类服务网站和电子商务网站的服务器:在这类网站中的服务器端,往往可能每秒存内可以接受多达上千条的数据并且需要将这些数据写入数据库中,NodeJs可以通过其队列机制将这些数据迅速写入缓存区中,然后再通过每一个单独的处理从缓存区中取出这些数据并将其写入数据库中,如果是其他的服务器(如Apache服务器或Tomcat服务器)的话,由于这些服务器采用的是阻塞型I/O机制,因此每条数据写入到数据库中都要等待一段时间(等上一条写完,才能写下一条),但是NodeJs使用的是非阻塞的I/O机制,因此可以实现这些数据到数据库中的写入,而不必再为每条数据的写入而等待一段时间;

总结:

一个规模稍微大点的系统都不是一种开发语言可以搞定的,往往是几种混杂一起,比如c、c++做服务器端开发,java做业务逻辑,php等做前端展示,此外还需要消息中间件等等。

nodejs可以很快地在服务器端做原型(原来只有c系和java等能做的事情,性能还很高),而且代码量相对会少很多;另一点是它的语法优势,js闭包等。但它不太适合做cpu密集型处理的工作,只能绕着弯去解决,据说这次QCon会有人分享这方面的研究成果,可以关注下。

每种语言都有它适合的领域,没必要强求一门语言可以解决所有事情,拥有其它语言的特性,只有不断的tradeoff把系统做出来才是目标。

这些都是丛书上看到总结的,还望指正

(0)

相关推荐

  • nodejs微信公众号支付开发

    odeJs 微信公众号功能开发,移动端 H5页面调用微信的支付功能.这几天根据公司的需要使用 node 和 h5页面调用微信的支付功能完成支付需求.现在把开发过程重新捋一遍,以帮助更多的开发者顺利的完成微信支付功能的开发.(微信暂时还没有提供 node 的支付功能) 一.请求CODE 请求 code 的目的就是获取用户的 openid(用户相对于当前公众号的唯一标识) 和access_token,请求的API:https://open.weixin.qq.com/connect/oauth2/a

  • Node.js批量给图片加水印的方法

    一.准备工作: 首先,你要阅读完这篇文章:http://www.jb51.net/article/97391.htm. 然后,我们安装node.js的一个模块:imageinfo. npm install imageinfo 二.直接上DEMO: 步骤如下: step1:文件夹结构 step2:JS代码 //引用文件系统模块 var fs = require("fs"); //引用imageinfo模块 var imageInfo = require("imageinfo&q

  • NodeJS远程代码执行

    背景 @Artsploit在挖PayPal的漏洞时,发现一处NodeJS代码执行,奖励$10000美金. 测试 var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello eval(req.query.q)); console.log(req.query.q); }); app.listen(8080, function () { console

  • 浅谈Nodejs应用主文件index.js

    前言 经过之前的文章 <浅谈Nodejs应用的主文件index.js的组成部分> ,终于认识了 Node 妹子的容颜,然后好像上呀<( ̄︶ ̄)>.呦西~这次让本屌在她胴体上游走一番,想想也是不错滴.嗯哼,YY到此为止. 正文 这篇文章主要以组成部分为单位了解一下 index.js 这个主文件...皮肤有多滑( ̄▽ ̄)~ 既然之前说过了index.js的组成部分,那么这次就一个组一个组的说.没错!本帅的手,怎么能放过你的每一寸肌肤! 一.引入依赖模块 嗯..就像这样: var exp

  • NodeJs的优势和适合开发的程序

    很多同学可能都听说过nodejs,并且知道他是可以运行在服务器上的javascript,但是他的使用场景可能大家并不是很清楚,最近也在看学习nodejs,就做了一下小总结: NodeJs的优势: 现在的很多的服务器端的语言(PHP,JAVA,ASP.net),有什么问题呢,现在的服务器端的语言在用户访问服务器时,为每个用户链接创建了一个线程,但每个线程大约要耗费2M的内存,如果一个8G内存的服务器,也就能链接4000个左右的用户,如果用户的链接数较大,就必须增加服务器的数量,而且现在用户的链接方

  • C#开发Winform程序调用存储过程

    数据表及数据准备: create table Member ( MemberId int primary key identity(1,1), MemberAccount nvarchar(20) unique, MemberPwd nvarchar(20), MemberName nvarchar(20), MemberPhone nvarchar(20) ) truncate table Member insert into Member(MemberAccount,MemberPwd,Me

  • Android NDK开发简单程序分享(Hello Word!)

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android程序,首先你必须了解C语言.JAVA语言以及Linux操作系统,这样可以帮助你开始上手,当然不是说你必须是大牛才能进行NDK开发,下面我们来一起实现一个简单的NDK程序. 第一步,创建Android工程 打开开发环境eclipse,在左侧空白区域,右键单击创建Android工程(非常简单,不再赘述)

  • Sublime开发python程序的示例代码

    本文介绍了Sublime开发python程序的示例代码,分享给大家,具体如下: 下载.安装Python程序 https://www.python.org/downloads/ 下载.安装 sublime http://www.sublimetext.com/ 关联python Preferences->Browers Packages ->Python ->Python.sublime-build 修改Python.sublime-build文件,增加python安装路径 { "

  • 使用apifm-wxapi快速开发小程序过程详解

    前言 我们要开发小程序,基本上都要涉及到以下几个方面的工作: 1.购买服务器,用来运行后台及接口程序: 2.购买域名,小程序中需要通过域名来调用服务器的数据: 3.购买 SSL 证书,小程序强制需要 https 的地址,传统无证书不加密的 http 请求微信不支持: 4.后台程序员开发后台程序,这样才能登录后台进行商品管理.订单维护.资金财务管理等等: 5.后台程序员开发小程序可用的 restfull api 接口或者是 websocket 接口: 6.开发的后台及接口程序的安全性.功能性.稳定

  • 如何基于JavaFX开发桌面程序

    基于JavaFX开发桌面程序 注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其他热门技术相比,教程还是太少了.这里就尽量做一点微小的贡献吧 使用环境 注:写这个只是为了说明我的环境,使用和我的不一样的环境在理解这篇教程的时候并没有什么问题,例如使用Windows平台.使用Oracle JDK(这样就不需要再单独安装FX组件了,可以不用MAVEN).使用Oracle的SceneBuilder.可能唯一一个比较影响体验的就是不使用IDE

  • Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果

    Taro 就是可以用 React 语法写小程序的框架,拥有多端转换能力,一套代码可编译为微信小程序.百度小程序.支付宝小程序.H5.RN等 摘要: 年后入职了一家新公司,与前同事交接完之后,发现公司有一个四端的项目(iOS,Android,H5,小程序),iOS和安卓都实现了左滑右滑的效果,而h5和小程序端没实现,询问得知前同事因网上没找到对应的插件,相关博客也特别少,所以没做就搁置下来了. 趁这段时间相对来说比较富裕,于是乎在网上也搜索了一下,发现确实很少,但是有人提到可以用小程序可拖动组件m

  • vscode+gulp轻松开发小程序的完整步骤

    利用 gulp+vscode 来开发小程序的一个小工具,内置扩展了一系列的 wx 全局api方法,支持自定义配置相对应的信息和别名等问题 安装方法: # 全局安装 npm install -g wechat-mini-gulp # 当前小程序根目录下运行 wechat-gulp run init # 安装依赖 npm install 运行 #开发环境 npm run gulpdev #正式环境 npm run gulpbuild # 测试环境 npm run gulptest # 清空conso

  • c# 开发语音识别程序

    AI 平台:http://ai.baidu.com/ 开发工具:vs 2017 准备工作 1.注册百度账号 2.登录百度 AI 开发平台,http://ai.baidu.com/ 3.在控制台点击"百度语音"服务,点击"创建应用",填写必填项,勾选额外接口,点击立即创建获取秘钥.在应用列表中查看自己的id 创建自己的项目 1.新建项目 打开 vs2017,点击文件,新建项目,选择 visual C# --> windows 桌面 --> windows

  • uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果

    前言 实现思路:通过小程序API中的触摸事件,配合CSS来实现元素的显示和隐藏.ps(也想过另一种通过监听页面滚动的方式来实现,不过效果一定很差0.0) 一.需要用到的事件touchmove.touchend 二.话不多说上代码 1.看需求,如果是整个屏幕滑动后元素发生变化,最好放在最外面的view 代码如下: <view class="container" @touchmove="handletouchstart" @touchend="handl

随机推荐