秘密を探るjs(一)――Node.js概要とインストール構成
1.Node.jsの概要と特徴:
Node.jsはJavaScriptをサーバ側で実行できるプラットフォームであり、Python、Perl、PHP、Rubyプログラムを実行するように、JavaScriptをブラウザの束縛から離れて一般的なサーバ環境で実行することができる.私たちはNodeを使うことができます.jsはサーバ側アプリケーションの開発を容易に行い、Python、Perl、PHP、RubyができることNode.jsはほとんどできますし、もっとよくできます.
Node.jsの最大の特徴は,非同期I/Oとイベント駆動のアーキテクチャ設計を採用することである.高同時性のソリューションでは、従来のアーキテクチャはマルチスレッドモデルであり、つまりビジネスロジックごとにシステムスレッドを提供し、システムスレッドの切り替えによって同期I/O呼び出し時の時間的オーバーヘッドを補う.Node.jsは単一スレッドモデルを用い,すべてのI/Oに対して非同期的な要求方式を採用し,頻繁なコンテキスト切替を回避した.Node.jsは実行中にイベントキューを維持し、プログラムは実行時にイベントループに入って次のイベントが来るのを待ち、各非同期I/O要求が完了するとイベントキューにプッシュされ、プログラムプロセスの処理を待つ.
このような利点は、CPUとメモリが同じ時間に一つのことを集中的に処理し、同時にできるだけ時間のかかるI/O操作を並列に実行することである.低速接続攻撃に対してjsはイベントキューにリクエストを追加し、オペレーティングシステムの応答を待つだけで、マルチスレッドオーバーヘッドが発生せず、Webアプリケーションの堅牢性を大幅に向上させ、悪意のある攻撃を防止することができます.もちろん、非同期モードの弊害も明らかである.開発者の従来の線形構想に合わないため、完全な論理を一つ一つのイベントに分割し、開発とデバッグの難易度を高める必要があることが多い(Node.jsのサードパーティモジュールは多くの解決策を提案している).
Node.jsはマルチスレッドの代わりに非同期I/Oとイベント駆動を用い,大きな性能向上をもたらした.Node.jsは、JavaScriptエンジンとしてV 8を使用するほか、効率的なlibevおよびlibeioライブラリを使用してイベント駆動および非同期I/Oをサポートしています.
2.Node.jsインストールと構成:
Node.jsは、GNU/Linux、Mac OS X、SolarisなどのPOSIX規格に準拠したオペレーティングシステムにインストールしてもよいし、Windowsにインストールしてもよい.Windows AzureがNodeに発表したにもかかわらず.jsは完全にサポートしていますが、Node.jsとWindowsの互換性は依然としてPOSIXオペレーティングシステムに及ばず、npmが提供するサードパーティモジュールで特に際立っている.WindowsでNodeを行うことは推奨されません.jsの開発と導入.32ビットのCentOS 6.6にNodeをインストールする方法について説明する.js :
私たちがダウンロードしたのはコンパイルフリーのインストールパッケージなので、解凍して使用できます.解凍したディレクトリを任意のディレクトリに移動し、環境変数を設定します.
これで、Node.jsはインストール済みです.テストjsが有効になったかどうか:
上記の結果は、Node.jsは既に使用可能です.
Node.jsにはサードパーティ製モジュールが多く、これらのサードパーティ製パッケージにより開発が極めて容易になります(Expressモジュールなど、安定して広く使用されているWeb開発フレームワークです).npmコマンドを使用してサードパーティモジュールをインストールできます.npmはUbuntuのapt-get、CentOSのyumに似ています.
npmのデフォルトは海外のソースからパケット情報を取得およびダウンロードするため、通常はダウンロード速度が非常に遅くなります.registryパラメータを使用してソースをカスタマイズできます.
他のバージョンのインストールパッケージはNode.jsの公式サイトはダウンロードして、住所は以下の通りです:
https://nodejs.org/download/
3.Node.jsの初歩的な理解:
先ほどHello Worldの方法を紹介しましたが、それ以外にも2つの方法があります.
(1)-eパラメータ:JavaScriptのeval()に似ています.
Hello World
(2)nodeに入るREPL(Read-eval-print loop)サイクル:
ここのundefinedはconsoleです.logの戻り値.エラーのコマンドを入力すると、REPLはすぐにエラーを表示し、呼び出しスタックを出力します.ctrl+cを2回連続で押すかctrl+dを1回押すだけでNodeを終了する.jsのREPLモード.このモードは、アプリケーション開発時に大きな便利さをもたらします.例えば、パッケージが正常に使用できるかどうかをテストしたり、アプリケーションのモジュールを個別に呼び出したり、簡単な計算を実行したりすることができます.
HelloWorldだけではあまりにもlowに見えるので、Nodeを使ってみましょう.jsはHTTPサーバを確立する.Node.jsはHTTPサーバを剥離し,ブラウザユーザに直接向ける.
あとでhttp://yourhostip:3000 ポート番号3000のサーバーにアクセスしに来ました.このプログラムはノードを呼び出した.jsが提供するhttpモジュールは、すべてのHTTPリクエストに対して同じ内容に返信し、3000ポートを傍受する.
ここではまずノードにjsは初歩的な理解をして、もっと多くの内容は後でゆっくりと展開して、味噌は先に~
参考資料:
『Node.js開発ガイド』著者:BYVoid
Node.jsはJavaScriptをサーバ側で実行できるプラットフォームであり、Python、Perl、PHP、Rubyプログラムを実行するように、JavaScriptをブラウザの束縛から離れて一般的なサーバ環境で実行することができる.私たちはNodeを使うことができます.jsはサーバ側アプリケーションの開発を容易に行い、Python、Perl、PHP、RubyができることNode.jsはほとんどできますし、もっとよくできます.
Node.jsの最大の特徴は,非同期I/Oとイベント駆動のアーキテクチャ設計を採用することである.高同時性のソリューションでは、従来のアーキテクチャはマルチスレッドモデルであり、つまりビジネスロジックごとにシステムスレッドを提供し、システムスレッドの切り替えによって同期I/O呼び出し時の時間的オーバーヘッドを補う.Node.jsは単一スレッドモデルを用い,すべてのI/Oに対して非同期的な要求方式を採用し,頻繁なコンテキスト切替を回避した.Node.jsは実行中にイベントキューを維持し、プログラムは実行時にイベントループに入って次のイベントが来るのを待ち、各非同期I/O要求が完了するとイベントキューにプッシュされ、プログラムプロセスの処理を待つ.
このような利点は、CPUとメモリが同じ時間に一つのことを集中的に処理し、同時にできるだけ時間のかかるI/O操作を並列に実行することである.低速接続攻撃に対してjsはイベントキューにリクエストを追加し、オペレーティングシステムの応答を待つだけで、マルチスレッドオーバーヘッドが発生せず、Webアプリケーションの堅牢性を大幅に向上させ、悪意のある攻撃を防止することができます.もちろん、非同期モードの弊害も明らかである.開発者の従来の線形構想に合わないため、完全な論理を一つ一つのイベントに分割し、開発とデバッグの難易度を高める必要があることが多い(Node.jsのサードパーティモジュールは多くの解決策を提案している).
Node.jsはマルチスレッドの代わりに非同期I/Oとイベント駆動を用い,大きな性能向上をもたらした.Node.jsは、JavaScriptエンジンとしてV 8を使用するほか、効率的なlibevおよびlibeioライブラリを使用してイベント駆動および非同期I/Oをサポートしています.
2.Node.jsインストールと構成:
Node.jsは、GNU/Linux、Mac OS X、SolarisなどのPOSIX規格に準拠したオペレーティングシステムにインストールしてもよいし、Windowsにインストールしてもよい.Windows AzureがNodeに発表したにもかかわらず.jsは完全にサポートしていますが、Node.jsとWindowsの互換性は依然としてPOSIXオペレーティングシステムに及ばず、npmが提供するサードパーティモジュールで特に際立っている.WindowsでNodeを行うことは推奨されません.jsの開発と導入.32ビットのCentOS 6.6にNodeをインストールする方法について説明する.js :
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget http://nodejs.org/dist/v0.12.2/node-v0.12.2-linux-x86.tar.gz
[root@localhost src]# tar -zxf node-v0.12.2-linux-x86.tar.gz
私たちがダウンロードしたのはコンパイルフリーのインストールパッケージなので、解凍して使用できます.解凍したディレクトリを任意のディレクトリに移動し、環境変数を設定します.
[root@localhost src]# mv node-v0.12.2-linux-x86 /opt/node
[root@localhost src]# vim /etc/profile
exportPATH=$PATH:/opt/node/bin
[root@localhostsrc]# source !$
これで、Node.jsはインストール済みです.テストjsが有効になったかどうか:
[root@localhost ~]# vim test.js
function hello(){
console.log(“Hello World”);
}
hello();
[root@localhost ~]# node test.js
Hello World
上記の結果は、Node.jsは既に使用可能です.
Node.jsにはサードパーティ製モジュールが多く、これらのサードパーティ製パッケージにより開発が極めて容易になります(Expressモジュールなど、安定して広く使用されているWeb開発フレームワークです).npmコマンドを使用してサードパーティモジュールをインストールできます.npmはUbuntuのapt-get、CentOSのyumに似ています.
[root@localhost ~]# npm install -g express
npmのデフォルトは海外のソースからパケット情報を取得およびダウンロードするため、通常はダウンロード速度が非常に遅くなります.registryパラメータを使用してソースをカスタマイズできます.
[root@localhost ~]# npm install -g express --registry=http://registry.npm.taobao.org/
他のバージョンのインストールパッケージはNode.jsの公式サイトはダウンロードして、住所は以下の通りです:
https://nodejs.org/download/
3.Node.jsの初歩的な理解:
先ほどHello Worldの方法を紹介しましたが、それ以外にも2つの方法があります.
(1)-eパラメータ:JavaScriptのeval()に似ています.
[root@localhost ~]# node -e ‘console.log(“Hello World”);’
Hello World
(2)nodeに入るREPL(Read-eval-print loop)サイクル:
[root@localhost ~]# node
>console.log(“HelloWorld”);
Hello World
undefined
ここのundefinedはconsoleです.logの戻り値.エラーのコマンドを入力すると、REPLはすぐにエラーを表示し、呼び出しスタックを出力します.ctrl+cを2回連続で押すかctrl+dを1回押すだけでNodeを終了する.jsのREPLモード.このモードは、アプリケーション開発時に大きな便利さをもたらします.例えば、パッケージが正常に使用できるかどうかをテストしたり、アプリケーションのモジュールを個別に呼び出したり、簡単な計算を実行したりすることができます.
HelloWorldだけではあまりにもlowに見えるので、Nodeを使ってみましょう.jsはHTTPサーバを確立する.Node.jsはHTTPサーバを剥離し,ブラウザユーザに直接向ける.
[root@localhost~]# vim app.js
//app.js
var http =require('http');
http.createServer(function(req,res) {
res.writeHead(200,{'Content-Type': 'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>HelloWorld</p>');
}).listen(3000);
console.log("HTTPserver is listening at port 3000.");
[root@localhost~]# node app.js
あとでhttp://yourhostip:3000 ポート番号3000のサーバーにアクセスしに来ました.このプログラムはノードを呼び出した.jsが提供するhttpモジュールは、すべてのHTTPリクエストに対して同じ内容に返信し、3000ポートを傍受する.
ここではまずノードにjsは初歩的な理解をして、もっと多くの内容は後でゆっくりと展開して、味噌は先に~
参考資料:
『Node.js開発ガイド』著者:BYVoid