ノードとは何ですか?
何かを書くときにすべてをカバーしようとする方が良いので、インターネットからいくつかの基本的な概念を取りました。いくつかの場所は私自身の理解を変えました。これらの概念的なことを理解している場合は、この段落をスキップすることを選択できます。
1.Nodeはサーバー側のJavaScriptインタープリターですが、JavaScriptが得意な学生はノードを学習することで簡単にノードを取得できるので、間違っていると思います。概要:水が深いかどうかはわかりませんが、実際には浅くありません。
2.Nodeの目標は、プログラマーが非常にスケーラブルなアプリケーションを構築し、数万の接続を物理マシンへの接続を同時に処理できる接続コードを作成できるようにすることです。高い並行性と非同期I/Oを処理することは、ノードが開発者の注目を集めた理由の1つです。
3.Node自体はGoogle V8 JavaScriptエンジンを実行するため、速度とパフォーマンスは非常に優れています。 Chromeを見ることで見ることができます。さらに、ノードをカプセル化しながら、バイナリデータを処理する機能も向上します。したがって、ノードは単にV8を使用するだけでなく、最適化して、さまざまな環境でより強力にします。 (V8 JavaScriptエンジンとは?「Baidu Knows」をお願いします)
4.サードパーティの拡張機能とモジュールは、ノードの使用に重要な役割を果たします。以下では、NPMのダウンロードも紹介します。 NPMはモジュール管理ツールです。それを使用して、さまざまなノードソフトウェアパッケージ(Express、Redisなど)をインストールし、ノード用に書いたソフトウェアパッケージを公開します。
ノードをインストールします
Windows 7とLinuxの2つの環境にノードをインストールするための簡単な紹介を次に示します。インストールするときは、Pythonバージョンに注意を払う必要があります。 Pythonバージョンの問題により、インストールは何度も失敗しました。 2.6+バージョンにはノードインストールエラーがあることをお勧めします。 Pythonバージョンを照会すると、入力できます。Pyhton-V
1。Linuxの下で最初にインストールを紹介しましょう。 Nodeは、Linux環境でのインストールと使用に非常に便利です。 Linuxの下でノードを実行することをお勧めします。 ^_^... ubuntu11.04を使用しています
a。インストール依存関係パッケージ:50〜100kb/s各パッケージをダウンロードして1分でインストールできます。
コードコピーは次のとおりです。
sudo apt-getインストールg ++ curl libssl-dev apache2-utils
sudo apt-getインストールgit-core
b。ターミナルでコマンドを段階的に実行します。
コードコピーは次のとおりです。
git clone git://github.com/joyent/node.git
CDノード
./configure
作る
sudoはインストールします
インストールがスムーズな場合、ノードは正常にインストールされ、2Mネットワークで合計12分かかります。
注:GITを使用してソースコードをダウンロードしない場合は、ソースコードを直接ダウンロードできますが、この方法でダウンロードしてインストールするときは、ノードバージョンの問題に注意を払う必要があります。 GITを使用してダウンロードしてインストールするのが最も便利なので、お勧めします。
2。Cygwinを使用して、Windowsにノードをインストールします。この方法は、本当に長い時間と良いキャラクターが必要であるため、お勧めしません。私のシステムはWin7フラッグシップバージョンです
Cygwinは、Windowsプラットフォームで実行されているUNIXシミュレーション環境です。ダウンロードアドレスはhttp://cygwin.com/setup.exeです。
Cygwinをダウンロードした後、インストールを開始します。ステップ:
a。ダウンロードのソースを選択します - インターネットからインストールします
b。ダウンロードしてインストールするには、ルートディレクトリを選択します
c。ダウンロードファイルが保存されているディレクトリを選択します
d。接続方法を選択します
e。ダウンロードするウェブサイトを選択してください-http://mirrors.163.com/cygwin
f。トラブルはこのステップで、あなたのキャラクターをテストする時が来ました。必要なダウンロードとインストール時間は不確かです。とにかく、長い時間(20分以上)かかり、インストールの障害が時々発生します。各パッケージの前の回転矢印アイコンをクリックして、必要なバージョンを選択します。選択すると、「X」サインは、パッケージが選択されていることを示しているように見えます。ダウンロードするパッケージを選択します。
コードコピーは次のとおりです。開発パッケージ:
GCC-G ++:C ++コンパイラ
GCC-MINGW-G ++:MINGW32 GCC C ++のヘッダーとライブラリをサポートしています
GCC4-G ++:G ++サブパッケージ
GIT:高速バージョン制御システムコアファイル
MAKE:「Make」ユーティリティのGNUバージョン
OpenSSL-Devel:OpenSSL開発環境
PKG-CONFIG:インストールされているライブラリに関する情報を取得するために使用されるユーティリティ
Zlib-Devel:Zlib圧縮/減圧ライブラリ(開発)
編集者パッケージ:VIM:VIは、VIエディターを改善しました
Pythonパッケージ:デフォルトのスイッチをインストールします
Webパッケージ:
WGET:HTTPとFTP経由でWWWからファイルを取得するユーティリティ
カール:マルチプロトコルファイル転送コマンドラインツール
以前のスクリーンショット、例としてZlib-Develをダウンロードしてください。
数歩の後、環境が完了します。ただし、ノードをまだインストールする時ではありません。 CywginのAshモードでRebaseallを実行する必要があります。手順は次のとおりです。
a。 CMDコマンドライン
b。 Cygwinインストールディレクトリの下にビンサブディレクトリを入力します
c。アッシュを実行してシェルモードに入ります
d。 ./REBASEALL -V
e。エラーなしでコマンドラインウィンドウを閉じます
さて、今度はノードをダウンロードしてインストールし、Cygwin.exeを起動して入力します。
コードコピーは次のとおりです。
$ wget http://nodejs.org/dist/node-v0.4.12.tar.gz
$ tar xf node-v0.4.12.tar.gz
$ cd node-v0.4.12
$。/configure
$ make
$インストールします
3.Node.exeファイルを直接ダウンロードします
Nodejs.orgに直接移動してダウンロードしてください。不安定な問題があると聞きましたが、最初にWindowsのノードについて学びたい場合は、この方法はCygwinをインストールするよりもはるかに優れていると個人的に感じます。
注:私は本当にノードをインストールするという段落を書きたくありませんでしたが、この記事の包括性のためにそれを書きました。書いている限り長くなるとは思っていませんでした...それはコーヒーテーブルです
「Hello World」 - この文を見るたびに少し興奮するのはなぜですか、そして私は困惑しています...
まず、hello.jsファイルを作成し、ファイルに次のコードをコピーします。
コードコピーは次のとおりです。
var http = require( 'http');
http.createserver(function(req、res){
res.writehead(200、{'content-type': 'text/plain'});
res.End( 'Hello World/n');
})。聞きます(1337、 "127.0.0.1");
console.log( 'http://127.0.0.1:1337/')で実行されているサーバー);
コードロジック:
a。グローバルな方法では、()がモジュールのインポートに使用される必要があります。一般に、require()メソッドの返品値は変数に直接割り当てられ、この変数はJavaScriptコードで直接使用されます。 require( "http")は、システムのプリセットHTTPモジュールをロードすることです
b。 http.createServerはモジュールの方法です。目的は、新しいWebサーバーオブジェクトを作成および返却し、リクエストを処理するためにサービスにコールバックをバインドすることです。
c。 HTTPサーバーは、http.listen()メソッドを介して特定のポートで聞くことができます。
d。 console.logは言うまでもなく、firebugを知っている人は、ノードがこの方法を実装することを知っておくべきです。
注:特定の詳細については、cnodejs.org/cman/all.html#http.createserverを確認してください
次に、ノードサーバーを実行し、hello.jsコードを実行し、正常に起動した後、console.log()にテキストが表示されます。写真と真実があります:
NPMのダウンロードと使用
ノード自体が提供するAPIに加えて、開発効率を大幅に改善できる多くのサードパーティモジュールが現在あります。 NPMはNodeのパッケージマネージャーであり、必要なソフトウェアパッケージをインストールし、NodeJS用に記述されたソフトウェアパッケージを公開できます。公式ウェブサイトの住所:npmjs.org
インストールでは、端末に1行のコードを記述する必要があります。
コードコピーは次のとおりです。
curl http://npmjs.org/install.sh | sh
NPM同じコードの行を持つノード拡張機能パッケージをインストールします。
コードコピーは次のとおりです。
NPMインストール<パッケージ名> //例:NPMインストールExpress
注:モジュールのインストール中にドメイン名のエラーが報告されている場合は、キャッシュ> NPMキャッシュをクリーンにクリーンにクリーンまたは再起動してください。
ノードのモジュール概念を理解します
ノードでは、異なる機能コンポーネントが異なるモジュールに分割されます。アプリケーションは、そのニーズに応じて適切なモジュールを選択して使用できます。各モジュールは、いくつかの一般的な方法または属性を公開します。モジュールのユーザーは、これらのメソッドまたは属性を直接使用でき、内部実装の詳細を理解する必要はありません。 Node自体が提供するAPIに加えて、開発者はこのメカニズムを使用してアプリケーションを複数のモジュールに分割して、コードの再利用性を向上させることもできます。
1.モジュールの使用方法は?
ノードでモジュールを使用すると非常に便利です。 JavaScriptコードでは、グローバル関数Reque()を使用してモジュールをロードできます。
今すぐ「Hello World」の例では、必要(「HTTP」)がシステムプリセットHTTPモジュールをロードできます。モジュール名は「./」で始まります。( "./ mymodule.js")が現在のJavaScriptファイルと同じディレクトリにmyModule.jsモジュールをロードするなどです。
2。自分でモジュールを開発する方法は?
モジュールをインポートするためにrequire()を使用すると、モジュール名が「./」が自分で開発したモジュールファイルで始まることを導入したときに紹介しました。注意する必要があるのは、JSファイルのシステムパスです。
モジュールの内部処理ロジックは、コードにカプセル化されています。モジュールは通常、他の人が使用するためのいくつかの公開方法または属性を公開します。モジュールの内部コードは、これらのメソッドまたは属性を公開する必要があります。
3。簡単な例を取りましょう。最初にmymodule.jsなどのモジュールファイルを作成します。
console.log( 'Hi Darren。')
次に、test.jsファイルを作成し、このJSファイルをインポートし、ノードを実行して結果を確認します
現在、ノードコミュニティには多くのサードパーティモジュールがあります。ノードを学び、ノードコミュニティに貢献することで、より多くの人々がこの大家族に参加できることを願っています。よろしくお願いします、続けましょう。
4.より深い例を挙げてください。この例では、プライベートと共有が紹介されます。最初にmymodule.jsを作成します。コードは次のとおりです。
コードコピーは次のとおりです。
var name = "darren";
this.location = "beijing";
this.showlog = function(){
console.log( 'Hi Darren。')
};
コードには3つのタイプがあります。つまり、プライベート属性、共有属性、共有メソッド、次にtest.jsを作成してノードを実行します
強調表示された領域は、モジュールの外でプライベートメソッドを取得できないため、未定義です。共有属性と共有メソッドの宣言には、これがキーワードの前に先行する必要があります。
ノードができることとその利点
ノードコアのアイデア:1。非ブロッキング。 2。シングルスレッド; 3。イベント駆動型。
現在のWebアプリケーションでは、クライアントとサーバー間のいくつかの相互作用をイベントベースと見なすことができるため、Ajaxはページのタイムリーな応答の鍵です。要求が送信されるたびに(要求されたデータがどんなに小さくても)、ネットワーク上を行き来します。サーバーはこのリクエストに応答する必要があり、通常は新しいプロセスを開きます。その後、ユーザーがこのページにアクセスするほど、より多くのリクエストが開始され、メモリオーバーフロー、論理的インターリーブ、ネットワーク麻痺、システムクラッシュなどの競合などの問題が発生します。
ノードの目標は、スケーラブルなネットワークアプリケーションを構築するソリューションを提供することです。 Hello Worldの例では、サーバーは多くのクライアント接続を同時に処理できます。
ノードとオペレーティングシステムには、新しいリンクが作成された場合、オペレーティングシステムがノードに通知してから冬眠に移動するという規則があります。誰かが新しいリンクを作成した場合、それ(ノード)がコールバックを実行し、各リンクは非常に小さな(メモリ)スタックオーバーヘッドのみを占めます。
非同期呼び出しの簡単な例を見て、test.jsとmymydule.js、 ^_ ^を準備します。次のコードをtest.jsにコピーして実行します。
コードコピーは次のとおりです。
var fs = require( 'fs');
fs.readfile( './ mymodule.js'、function(err、data){
(err)スローERR;
console.log( 'ressuly');
});
console.log( 'async');
非同期、誰もがランタイムが最初に「Async」を表示し、次に「正常に」表示すると考えることができるはずです。
ノードは非ブロッキングであり、新しいリクエストがサーバーに到着すると、このリクエストのために別々に何もする必要はありません。ノードは、リクエストがそこで発生するのを待っているだけで、リクエストがある場合はリクエストを処理します。
ノードは、小型のリクエストとイベントベースのI/Oの処理に適しています。
ノードは、Webサービスを作成するためのフレームワークであるだけでなく、たとえばファイルベースなどを実行できるなど、さらに多くのことができます。その後、いくつかの例に基づいて、子どものプロセスが存在する可能性があり、内部的には、ネットワークの最初の層に制限されるのではなく、いくつかの非同期非注入ソリューションを含む非常に完全なイベントメカニズムです。同時に、Webサービスであっても、サービスカーネルとコアに浸透する可能性のあるより多くの機能を提供する場合があります。たとえば、ノードで使用されるHTTPエージェントは、サービスカーネルに侵入していくつかの機能を実行できることです。
ノードイベントフローの概念
ノードはイベント駆動型モードを採用するため、多くのモジュールがさまざまなイベントを生成し、モジュールはイベント処理方法を追加できます。イベントを生成できるすべてのオブジェクトは、イベントモジュールのEventeMitterクラスのインスタンスです。コードは世界中で共通の言語であるため、コードを使用して話します。
コードコピーは次のとおりです。
var events = require( "events");
var emitter = new Events.eventemitter();
emitter.on( "myevent"、function(msg){
console.log(msg);
});
emitter.emit( "myevent"、 "hello world");
この段落の簡単な分析:
1. require()メソッドを使用してイベントモジュールを追加し、変数に戻り値を割り当てます
2。新しいevents.eventemitter()文は、イベントモジュールのイベントクラスのいわゆるインスタンスであるイベントトリガーを作成します。
3。on(イベント、リスナー)は、イベントイベントイベントにイベントハンドラーを追加するために使用されます
4。Emit(event、[arg1]、[arg2]、[...])メソッドは、イベントを生成するために使用されます。リスナーリストの各リスナー関数は、リスナー関数のパラメーターとして提供されたパラメーターと順番に実行されます。
EventeMitterクラスのメソッドは、イベントの生成と処理に関連しています。
1。AddListener(イベント、リスナー)およびOn(イベント、リスナー)はどちらも、指定されたイベントのリスナー配列の最後にリスナーを追加する方法です。
2。一度(イベント、リスナー)この方法は、イベントの1回限りのリスナーを追加します。リスナーは、イベントが初めて解雇されたときに実行され、その後削除されます
3。Removelistener(イベント、リスナー)この方法は、指定されたイベントのリスナー配列からリスナーを削除するために使用されます。
4。エミット(event、[arg1]、[arg2]、[...])はちょうど言及されています。
ノードには、さまざまな異なるデータストリームがあり、ストリームは異なるオブジェクトによって実装された抽象的なインターフェイスです。たとえば、HTTPサーバーを要求するリクエストは、stdout(標準出力)と同様のストリームです。ファイルシステム、HTTPリクエストと応答、およびTCP/UDP接続を含みます。ストリームは、読みやすく、書くことができる、または読みやすく、書くことができるものです。すべてのストリームはEventeMitterのインスタンスであるため、さまざまなイベントを生成できます。
読みやすいストリームは、主に次のイベントを生成します。
1.dataこのイベントは、ストリーム内のデータが読み取られるとトリガーされます。
2.ストリーム内に読み取るデータがない場合、このイベントがトリガーされます
3.このイベントは、データを読み取るときにエラーが発生したときにトリガーされます。
4.ストリームが閉じられると、このイベントがトリガーされますが、すべてのストリームがこのイベントをトリガーするわけではありません。 (たとえば、接続中に着信するHTTPリクエストストリームは、「クローズ」イベントをトリガーしません。)
また、より特別なFDイベントがあり、これはストリームでファイル記述子が受信されたときにトリガーされます。 Unixストリームのみがこの機能をサポートしており、他の種類のストリームはこのイベントをトリガーすることはありません。
関連する詳細なドキュメント:http://cnodejs.org/cman/all.html#events_
強力なファイルシステムファイルシステムモジュール
ノードのFSモジュールは、ローカルファイルシステムで動作するために使用されます。ファイルのI/Oは、標準のPOSIX関数によってカプセル化されています。このモジュールは、要求( 'fs')を使用してアクセスする必要があります。すべての方法は、非同期および同期方法を提供します。
FSモジュールで提供される方法は、読み取り、書き込み、名前変更、ディレクトリの作成、削除、ファイルメタデータの取得など、基本的なファイル操作を実行するために使用できます。ファイルを操作する各方法には、同期バージョンと非同期バージョンの2つのバージョンがあります。
非同期操作のバージョンは、最後のパラメーターとしてコールバックメソッドを使用します。操作が完了すると、コールバックメソッドが呼び出されます。コールバックメソッドの最初のパラメーターは、操作中に発生する可能性のある例外として常に予約されています。操作が正しくて成功している場合、最初のパラメーターの値はnullまたは未定義です。
同期操作バージョンのメソッド名は、対応する非同期メソッドの後にサフィックスとして同期を追加することです。たとえば、非同期rename()メソッドの同期バージョンはrenamesync()です。以下には、FSモジュールにいくつかの一般的な方法がリストされており、非同期操作のバージョンのみを導入します。
test.jsとmymodule.jsファイルは準備ができていますか?次のコードを1回test.jsにコピーします
コードコピーは次のとおりです。varfs = require( 'fs');fs.unlink( './ mymodule.js'、function(err){
(err)スローERR;
console.log( 'MyModule.js'を正常に削除しました ');
});
エラーがない場合、mymodule.jsは削除されます。そんなに簡単です
これは単なる簡単な例です。興味があるなら、自分で試して真実を練習してください。スペースの理由により、私は多くの例を挙げません。 ^_^
学習ノードの概要:
1. Linuxコマンドとシェルに関する知識がほとんどない私にとって、この期間中にLinuxについて多くの知識を学びました。 Vimは本当に強力な編集者であり、マウスを使用しないのは本当に気持ちがいいです。そして、1つのことは私にとって非常に重要です。 Linuxの下でのプログラミングは非常にクールで、特にチームではより健康的なインストールに使用されます^_^。
2。サーバー側のJavaScript -ノードの成功したフレームワークとその利点と使用法の一部を理解すると、この記事は最高の要約です。もちろん、これは始まりにすぎません。
みんなに言うべきこと:
1.ここでは、何人かの人々の熱意を打たなければなりません。バックエンドテクノロジーについて十分にわからない場合、またはサーバー言語にさらされたことがなく、I/Oについて知らない場合、バックエンド処理フローの概念がない場合、ノードはエントリレベルに適したサーバー側のテクノロジーではありません。なぜそう言うのですか:
a。重要な点は、中国語にはほとんど例や記事があるため、体系的に学ぶ方が面倒なので、使用中は常に未熟な感覚があります。もちろん、それは主にそれに不慣れであることによって引き起こされます。実際、中国にノードを使用している企業は多くありません。もちろん、まだ海外ではまだ多くあります。 cnodejs.orgから写真を撮りました。
3.私は実際に夢を見ていない会社に入らないことについていくつかの後悔を持っていますが、人生はまさに私が必要とし、期待することであるこのようなものでなければなりません...それから私はまだ私の新しい人生を続け、あなた自身のヘルムマンであり、あなた自身の方向をつかみ、それが過去のものを通過させなければなりません。
b。経験の浅い友人にとって、ノードは簡単に始めるのが簡単ではありません。それは最も単純な「Hello World」から見ることができます(さまざまな動作環境とインストールの詳細の理解には多少の努力が必要です)。 jqueryライブラリを比較しないでください。処理されたものは異なり、学習コストも異なります。したがって、初心者向けのサーバー側のテクノロジーになることはお勧めしません。サーバーサイドの言語PHPとPythonを学びたい場合は、次のように選択肢があります。
C.上記は私の個人的な親切な提案です。私のレベルが限られているため、私にアドバイスを与えてください。
2。ノードの作成基準と特定のスキルについては醜いわけではありません。自分でノードを書くコードはあまりありませんが、オブジェクト指向のプログラミングのアイデアはどこでも良いです。
3。この記事が誰もがノードを学ぶのに役立つことを願っています