源码安装使用Node.js

一、简介

Node.js是一个开放源代码、跨平台的、可用于服务器端和网络应用的运行环境。Node.js应用JavaScript语言写成,在Node.js运行时运行。它支持OS X、Microsoft Windows、Linux、FreeBSD、NonStop、IBM AIX、IBM System z和IBM i。Node.js由Node.js基金会拥有和维护,该基金会与Linux基金会有合作关系。

Node.js提供事件驱动和非阻塞I/O API,可优化应用程序的吞吐量和规模。这些技术通常被用于实时应用程序。

Node.js采用Google的V8引擎来执行代码。Node.js的大部分基本模块都是用JavaScript写成的。Node.js含有一系列内置模块,使得程序可以作为独立服务器运行,从而脱离Apache HTTP Server或IIS运行。

JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,Node.JS就是一个解析器。

概述

Node.js允许通过JavaScript和一系列模块来编写服务器端应用和网络相关的应用。核心模块包括文件系统I/O、网络(HTTP、TCP、UDP、DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等等。Node模块的API形式简单,降低了编程的复杂度。

Node.js主要用于编写像Web服务器一样的网络应用,这和PHP和Python是类似的。但是Node.js与其他语言最大的不同之处在于,PHP等语言是阻塞的(只有前一条命令执行完毕才会执行后面的命令),而Node.js是非阻塞的(多条命令可以同时被运行,通过回调函数得知命令已结束运行)。

Node.js是事件驱动的。开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。其他服务器端语言难以开发高并发应用,而且即使开发出来,性能也不尽人意。Node.js正是在这个前提下被创造出来。Node.js把JavaScript的易学易用和Unix网络编程的强大结合到了一起。

Node.js使用Google V8 JavaScript 引擎,因为:

  • V8是基于BSD许可证的开源软件
  • V8速度非常快
  • V8专注于网络功能,在HTTP、DNS、TCP等方面更加成熟

Node.js已经有数十万模块,它们可以通过一个名为npm的管理器免费下载。Node.js开发社区主要有两个邮件列表、一个在freenode的名为#node.js的IRC频道。社区集中在NodeConf

安装

安装程序

从Node.js官网(https://nodejs.org/en/download/current/)上可以下载最新的各版本安装包。包括Windows、Mac OS、Linux的二进制程序包和源码包。

编译环境

在官方GitHub网站上,注明了程序编译安装的需求,要求g++版本4.8以上,Python版本2.6以上。https://github.com/nodejs/node/blob/master/BUILDING.md

下面的编译安装操作是在CentOS7.0以上版本进行,环境都已达到要求,如果是在CentOS6.x版本上进行操作,GCC版本则不满足编译需求,同需源码安装/升级GCC。

编译安装

下载最新源码包进行编译安装:

wget https://nodejs.org/dist/v8.9.4/node-v8.9.4.tar.gz
tar zxf node-v8.9.4.tar.gz -C /usr/local/src/
cd /usr/local/src/node-v8.9.4/
./configure --prefix=/usr/local/nodejs
make -j `cat /proc/cpuinfo | grep processor | wc -l`;make install
echo 'PATH=$PATH:/usr/local/nodejs/bin' > /etc/profile.d/nodejs.sh
source /etc/profile.d/nodejs.sh

附:GCC升级

以CentOS6.5操作系统为例,进行GCC升级:

下载安装包

  • 主程序包

到官网上可下载到各版本的稳定版源码:https://gcc.gnu.org/releases.html ,这里我选择4.8.5版本(CentOS 7.x也采用此版本)。

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
tar jxf gcc-4.8.5.tar.bz2 -C /usr/local/src/
  • 依赖包

专用库:浮点数运算相关:gmp, mpfr, mpc; 编译优化相关:cloog;都可以在http://ftp.gnu.org/gnu 下找找到对应的软件包。

wget http://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.xz
wget http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.3.tar.xz
wget http://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
wget http://www.bastoul.net/cloog/pages/download/count.php3?url=./cloog-0.18.4.tar.gz
mv count.php3\?url\=.%2Fcloog-0.18.4.tar.gz cloog-0.18.4.tar.gz
tar Jxf gmp-6.1.0.tar.xz -C /usr/local/src/gcc-4.8.5/
tar Jxf mpfr-3.1.3.tar.xz -C /usr/local/src/gcc-4.8.5/
tar zxf mpc-1.0.3.tar.gz -C /usr/local/src/gcc-4.8.5/
tar zxf cloog-0.18.4.tar.gz -C /usr/local/src/gcc-4.8.5/

操作

yum install gcc gcc-c++ glibc-static glibc-devel.i686
cd /usr/local/src/gcc-4.8.5
ln -s gmp-6.1.0/ gmp
ln -s mpfr-3.1.3/ mpfr
ln -s mpc-1.0.3/ mpc
ln -s cloog-0.18.4/ cloog
yum install -y gcc glibc-static glibc-devel glibc-devel.i686
./configure --prefix=/usr/local/gcc-4.8.5 --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++ --enable-libgcj-multifile --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
make -j `cat /proc/cpuinfo | grep processor | wc -l`
make install
/usr/local/gcc-4.8.5/bin/gcc -v

echo 'export PATH=/usr/local/gcc-4.8.5/bin:$PATH' > /etc/profile.d/gcc.sh
source /etc/profile.d/gcc.sh
echo '/usr/local/gcc-4.8.5/lib' > /etc/ld.so.conf.d/complie.conf
echo '/usr/local/gcc-4.8.5/lib64' >> /etc/ld.so.conf.d/complie.conf
ldconfig

运行本地程序

Hello World

可以直接在node交互模式中执行并显示结果:

node
console.log('Hello World!');

vim hello.js
function hello() {
    console.log('Hello World!');
}
hello();
node hello.js

简单的HTTP Server

建立脚本文件,使用node js文件名便可执行。

同BASH一样,可以在开头指定脚本解释,然后设置执行权限,也可直接运行:

vim server.js
#!/usr/local/nodejs/bin/node
var http = require("http");

function onRequest(request, response) {
  console.log("Request received.");
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}

http.createServer(onRequest).listen(8888);

console.log("Server has started.");
chmod +x server.js

启动:

./server.js

网页访问:

分析server.js:

  1. 第一行请求(require)Node.js自带的http模块,并且把它赋值给http变量。
  2. 定义了一个回传函数onRequest,当操作触发后,log会向终端输出“Request received.”然后向请求端输出200头和”Hello World”。
  3. 接下来执行http模块自带的函数:createServer。这个函数调用了onRequest函数,同时使用listen方法,指定HTTP服务器的监听端口号。
  4. 向终端输出“Server has started.”

发表评论

error: Content is protected !!