>>すべての権利。
そうクリフハンガーは何であるか、だった Node.jsのあなたは今日それを知っている？
何？うん？
>>それはのようだった JavaScriptを記述するフレームワーク
広くアプリケーション -
>> [OK]を、それが動作します。
>> - 私は好き知っている のような一般的な使用 -
か何かあなた 行うことができますのようなものです -
[聞こえない備考]
>> [OK]良い。
ええ、そう、それはフレームワークです。
それはユーエンジンの JavaScriptのコードを実行することができます
サーバーサイト。
これが意味することができます 物事の最も簡単な
コマンドラインを記述するような いないPythonやbashでスクリプト
RubyやPHPのが、ちょうどか JavaScriptの自体に
とでそれを実行する コマンドプロンプトを点滅。
または、実際に実行することができます Webサーバー内でそれ。
実際に内 自体はNode.jsの、
このフレームワークは、全体の束である ある間のライブラリーの
HTTPサーバに内蔵しています。
だから、あなたは、実際に書くことができます 私達が見るようサーバー
後すぐに、超簡単に 少しだけを理解することで
HTTPとTCPとポートの。
そして、あなたはリスニングを起動することができます アパッチせずにWebサーバー、
MicrosoftのIISなしで。
他のなしで ソフトウェアがインストールされ、
あなただけのこれを起動することができます 最も任意のポートに耳を傾ける
そのシステムの あなたはに許可されています。
だから、ケースとポイント、 私が行くと開いてみましょう
この例まで、サーバー0.js。
そう気づくその上 このファイル、ちょうど束
つまらないのコメント、 そして、その後はいくつかあります
コー​​ドの代表行 我々はrecurringly表示されますことを。
そのため、VARのHTTPを取得 「HTTP」を必要とします。
だから、内蔵の「Node.jsのために インフラストラクチャは、全体の束である
本当にただあるモジュールの ライブラリとすべてがソートされる
名前空間での ユニークな識別子
今回のような「HTTP」である。
だからたくさんの中のような JavaやC + +などの言語
とC、ときにのみ インポートまたはインクルード
またはノードに必要と話す モジュールには、そのビットを行います。
そして、すべてのメモリ ロードされる必要があります
RAMにあるために使用。
だから、あなたは一種の、これを読み込む オンデマンドライブラリまたはモジュール。
これは先に行くと必要とを意味
このプログラムの HTTPライブラリ、
とで、そのライブラリを参照してください HTTPと呼ばれる変数の道。
しかし、この左側のシンボルでし fooという、何と呼ばれてきた、
バー、バズ、それは問題ではありません。
だから、C + +やJavaとは異なり、かつ Cここで、必要な時に
またはライブラリをインポートし、 それだけでソート
のグローバルにアクセス可能となり、
Node.jsのモジュールです より緊密に名前空間。
その機能 - 自身のように、 現時点でのみアクセス可能です。
この変数名を経由して。
あなただけ起動することはできません 存在タイピング方法
その中の正しい方法 これはおそらく良いですが、
なぜなら、あなたの名前空間 ほぼ同じ雑然と取得していません
多くの言語のように。
大丈夫、だから今共通として HTTPサーバを作成示唆する
ジョナサンは[スペルを想定]として 可能であった、文字通りです
呼び出すのと同じくらい簡単 内部のサーバーメソッドを作成
HTTPモジュールの。
そう、これが戻っている リファレンス
Webサーバのいくつかの種類に。
それは、アパッチにはない来た 必ずしも重い。
この1は少し簡単です。
そして今、私は持っているだけで 単にいくつかのことを行います。
そこでまず、私がスクロールしてみましょう ここで一番下まで
とハンドラをスキップ 一瞬のための方法。
そして、このコード行に気付く
あるserver.on 基本的にサーバを意味します -
jQueryのコードのように聞いて、
イベントをリッスン 要求と呼ば
ちょうど推測を取る 私は何をすべき
とき要求イベント サーバ内の火災。
うん？
>>関数ハンドラを呼び出します。
そう、文字通り実行 参照されたのは、コード
この変数で、実際に ここではシンボルではない変数、
そのシンボルは何ですか を参照する？
さて、この名前の ここにアップ機能
ハンドラ明らかに 2の引数をとります。
なぜ2？さて、もしあなただけの 何の文書を読んでいない
この特定のモジュールについては、 ハンドラと言われます
それはなりますが呼び出されます 渡された少なくとも二つの引数、
要求への参照、
と要求、我々の内部 文字通りHTTPリクエストを意味する。
だから、すべてのHTTPヘッダーを あなたが思い出すかもしれない
当初から 学期またはいくつかの従来のクラス
などの経験 ラインおよびホストの行を取得する
とのUser-Agentライン、すべてのこと より内側にカプセル化されている
この要求オブジェクトの。
とレスポンスオブジェクトです アウトバウンド·データのための並べ替え。
だから、あなたはへの参照を持っている あなたができるように起こっているオブジェクト
に情報を送信する メソッドを呼び出すことで、ブラウザー
後者の引数に 応答の間、RESと呼ばれる。
しかし、これはfooやとも言える バー、これは単なる慣習である。
だから今、私は何をしますか？
まあ、それは、その内部に表示されます この超簡単Webサーバの
私が実装していることを、私は今 次のことをするつもり。
私は、HTTPを書くつもりだ ステータスコード200を持つヘッダー、
200 OKの意味は、すべてが順調です。
そして、私は行くよ 明らかに渡すことができます。
のデータ型は何ですか 右頭部への二番目の引数？
>>これは、オブジェクトの？
>>それは持つオブジェクトです どのように多くのキーと値？
それぞれのちょうど1、右、 ペアの1キー値。
だから、「コンテンツタイプ」。
そして唯一の理由 私はあるそれをここに引用しています
ハイフンはあるかもしれないので、 マイナス記号のために融合さ
またはそのような何か。
だから、私はここでそれを引用する必要が、 焦がすまたは二重引用符。
しかし、再び共通のパラダイム
JavaScriptコードであることが多い 単一引用符、これらの日、
コロンとその値。
そのように、これは単に いわゆるマインドタイプ。
これは、HTTPヘッダーです それは文字通り起こっている
コンテンツハイフン型のコロンであると 起こっているテキストスラッシュ平野
から送信される ブラウザにサーバー
ブラウザが認識できるように 生のテキストとしてこれを実行するかどうか
またはHTMLまたは イメージやムービー
またはフラッシュファイルまたは 何か。
さて、ここで私は実際にはしたいです ページの本文に送信するには？
まあ、ただ読むことによって ドキュメンテーション
レスポンスオブジェクトの このライブラリの内部。
私は右があることを参照してください。 方法、それは文字列を受け取り、
多分他のものが、 最小限の文字列。
そして文字列は何です ブラウザに吐き出す。
この場合、そのスーパー シンプルな、そのハロー世界、
それはopneかもしれない ブラケット、HTML、閉じ括弧、
開き括弧ヘッド、近い ブラケットなど、
これは生のHTMLである可能性があります。
しかし、我々は例を維持している ただ吐きによる簡単な
心の種類の最も単純な外 これは間違いなくテキスト/ plainです。
そして、ちょうどResponse.Endの 接続を閉じることを意味
そして私が持っているすべてのものを送信 内部のバッファリングのようなもの
このオブジェクトのバック ブラウザに。
私は終わりだ。わかりました。
だから、最後のもの 私はここでダウンしてやってる
これは多少ある 任意でクールであることを意味し
私が言っているされている 最終的に耳を傾けるようにサーバー
特定のTCP上 デフォルトのポートによる。
最初からリコール クラス、そのサービスの -
または、通常は一意に 数字によってそれを識別し、
ADはウェブで、443がHTTPベースの ウェブサイト、22は、SSHで、21は、FTPで
そして1337年はちょうど任意である それは1024年よりも高いです
最も上のことを意味する システムでは、私はそれを使用することができます
スーパーを必要とすることなく、 ユーザー権限。
だから、それだけで便利です。
しかし、8080はオフである - 共通 ビッグ1、8088、本当に何
共通としてたくさんの しかし、これはちょうどよりエリートである。
大丈夫、だから何が起こる 私は実際にこれを実行すると？
まあ、私はちょうど訪問していない ブラウザでページを表示します。
このファイルは、サーバー0.jsと呼ばれています。
再び、Apacheがされているため、 今絵のうち、
後半のために もちろん。
私は、ウェブにしたい場合 サーバー、私が記述する必要があります
して、このWebサーバーを実行してください。
しかし、それはJavaScriptのことが判明 両方のクライアント側で
サーバ側である インタプリタ言語。
だから、私は必要なすべてのです インタプリタ。
そうit's - 実行すると主張した場合 ノードと、サーバ·0.js、
私がしたり表示されない場合があります いくつかの出力に応じ
どのライブラリに私が用意しました、 何も起こっていないようにみえます。
しかし、私はへ行こう ブラウザとわたしを離さ
同じIPアドレスに 私CS50クライアントの。
しかし、これは単なる可能性 だけでなく、私のMacも
またはその後、私のPCとは、エンターキーを押します。
つまり、実際には、Apacheのように見えます。
これは、ディレクトリのようなものだ 我々は見て上場
前半の時。
だから、私は間違って何をした？
うん。
[聞こえない備考]
正確には、右か？
だから、Apacheはまだ聞いている デフォルトのポート80で。
私はそれを変更することができたとしても、 私はすべて一緒にそれをオフにすることができ
それはまだ実行している。
しかし、これらの人は、CAN 確かに共存している。
私は単純に配置する必要があります コロン1337と、多分
またはそうでないかもしれないスラッシュで このポートにアクセスするには、エンド
このサーバーが実行されている。
そして今、私がいることがわかり こんにちは、世界が戻ってきた。
そして私はリロードを打つことができます 私が望むように何度も、
それはまだページを提供するだ。
確かに、私はChromeのを開く場合は、 検査員は、ネットワークに行く
して、ページ全体をリロードする、
確かにこれがあったことに気付く 送信されたリクエスト。
私は生のソースを見ると、
私のブラウザが送信する気づく それらのもののすべて。
してからの応答 サーバーは、超簡単だった。
200があります。
それはあまりにも低くはない場合 画面上で、
コンテンツの種類があります。
して、Node.jsの 並べ替えを自動的
掲載は、日付を追加し、 他のもののすべて
ブラウザでは、一般的に期待していること。
それでは、ただ見てみましょう 少し健全性チェック。
私は、コードに戻りましょう サーバー0.js内とさせて頂いております -
私が入るたびに、 ハンドラ、
私はただのconsole.logを言わせて。
（ '我々は、訪問者を持っていた！'）。
私は再コンパイルする必要はありません またはそのようなこと、
それはインタプリタ言語です。
だから今、私はに戻りましょう ページ、1をリロード、2、
3回行く 私のウィンドウに戻り。
そして今、私はこれを参照してください。
まあそれは奇妙だ、 私は6行を参照してください。
興味深いウェブトリビア、なぜ 私はしません3 6要求を取得？
うん？
[聞こえない備考]
うん。だから、あなたが知っている可能性がある トップに少し愚かなアイコン
多くのブラウザバーの
ウェブサイトの使用マイトの ハーバード大学の紋章であること、
それは会社のロゴかもしれません またはそのような何か。
だから、ソートこのごろブラウザ
の無遠慮にする 追加のHTTPリクエスト
そのほとんどすべてのウェブサイトへ が存在する場合は、チェックを訪問
デフォルトのファイルによる favicon.icoを呼ばれる
と同じディレクトリに あなたが要求されたファイル。
もしそうなら、それは置く そこにアイコンが表示されます。
我々は見ているので、すべての まさにそれです。
そして実際には、我々かどうかを見てみましょう むしろタイプよりもこれを見ることができます
ちょうど、「我々は、訪問者を持っていた」。
私が先に行くと、出力してみましょう。
そして私はからこれを知っている 資料を見ている。
内部のプロパティがあります のURLと呼ばれるリクエストオブジェクト
パスであることを起こるどの
それが要求されました 実際のURLにある。
だから、私は、サーバーを再起動した場合 単純にノードを再実行
サーバー0.jsとオン さて、この1、2を行う
3とは、ここに戻って行く。
そこである。
スラッシュは、私は - 要求された人間
favicon.icoをしている 何ブラウザがある
無遠慮に要求。
しかし、ポイントではありません そんなにファビコンのもの
しかし、どのようにサーバーを作動させる。
うん？
>>なぜ持っていないこと いくつかの要求であると？
>>なぜしなければならないことか - HTTPがどのように動作するかの性質。
だから、HTTPのみ要求することができます 一度に1ファイル。
ブラウザでは、これらの日にスマートすることができます
とTCPを保つ 接続をオープンした。
あなたは一般的にはCS143を取った場合、または ネットワーキングに精通し、
だから、効率性の向上を得ることができます
ネットワークを維持することにより ソケットオープン
複数のHTTPを行う際に その上に連続的に要求
しかし、彼らは一つのファイルだ 要求ごと。
だから、あなたが訪問した場合 のようなもの -
私は、我々が行くことができることを意味 ほとんどすべてのウェブサイト。
あなたがに行くと - のプルアップしましょう ここにChromeのインスペクタ。
それはほとんどを埋めることがあります ページの。
[ネットワーク]タブに移動します そしてwww.cnn.comに行く。
そして、あなたが訪問したとき cnn.com、そのホームページ -
むしろatrociouslyブラウザ ます - まだ数える。
[OK]をクリックします。少なくとも289のHTTP 何度も何度も要求する。
あなたが訪問したとき、これが理由です 特に肥大化したWebサイト、
彼らは負荷に遅いです なぜなら、すべての
彼らは読み込んでいる資産。
だから、それは298のように見えます。
いくつかのAjaxがあるかもしれません この時点で起こっているか、いくつかの
資産だけ低い。
そのように、それらの各々は、 個々の要求には、戻って
行ったり来たり、行ったり来たり。
そして、なぜそれ以前の、でもそれはだ 我々は、ソートの話も
それについて多少fancifully スクリプトタグを置く場所、
絶対になります あなたが持っているの違い -
それは多くを持って始める トラフィックやたくさんの
のファイルが要求されている。
そして、これはそれぞれ、表し おそらく、画像、メディアファイル、
JavaScriptファイル、 CSSファイルなど。
そこで、我々は最大既にしている いくつかの4メガバイトだけ
今日のニュースを見てみます。
良い質問。
わかりました。
だから、いくつかは何ですか しかし五分五分？
右、我々は作る方法を知って すでにPHPでウェブページ。
そして、あなたの多くは、に入って来た ジャンゴを知っクラス
とPythonやRubyとレール。
では、なぜ我々はまた別のが必要なのですか 言語とインフラ？
特にNode.jsのは何ですか あなたが知っている場合が得意？
[一時停止]
いくつかのこと？
なし？うん？
>>メッセージを中継。
>>だから、メッセージを中継する。
だから、それは本当だし、それは本当だ より技術的な理由で
それは本当にNode.jsのと JavaScriptは特にです
非同期に適し コー​​ド、
あなたが作成し、それによって場合 錯覚
複数を行う 一度物事。
だから、彼らがしているにもかかわらず、 本当にシリアルに起こって、
確かに、ほとんどの場合、 JavaScriptのクライアント側の両方
サーバ側である シングルスレッド。
これを使用して161を取っている場合は、 あるいは61のことを意味します -
このプログラムを知って、
インタプリタができ、文字通り 一度だけで一つのことを行う。
しかし、これはのための素晴らしいではありません Webサーバのようなもの
あなたが数十を持っている可能性がある場合、または 数百または多分、何千
ユーザーはすべてしようとする あなたのWeb​​ページにアクセスします
非常同時に。
そして、まだ、示唆している それは彼らに1取り扱い
次々と後 その他の場合は特に、いくつかの
我々が見たように、これらの要求の CNNに提供が必要な場合があります
あなたの前に300ファイルをバックアップ でも、次のユーザーを取得する
見たい人のニュースは述べています。
Node.jsのは適しています そのような環境のため。
されている何が起こるか理由 任意の遅い実行中のプロセス
ディスクからファイルを読み込むなど データベースを照会するか、話
いくつかの他のネットワークサーバに、
すなわち有する傾向 レイテンシ、右？
あなたがかかった場合は61または161 この種の特にすべて
周辺サービスの 非常に遅くなる傾向があり
内部に何もしてより 同じRAMと同じCPU
つまり、この場合で言う サーバーが実際に実行されています。
しかし、何が約うれしいです Node.jsのは、あなたができることです -
とJavaScriptより一般的には あなたが何かをすることができるということです
そして、うーん」と言う これが起こっている
私に数ミリ秒を取る あるいは数秒。
「私は一種のそれをフォークしてみましょう しかし、それは本当のプロセスではありません。
そしてそれはやって終わったとき その遅い実行中のプロセス
から行をつかむような データベースまたはファイルを読み込む。HTML
ディスクから、それは意志 むしろ私に戻って取得
私はそれを待つことよりも。
ですから、これをより明確にする。
これが私の手段である これはより身近なこと。
大丈夫なので、これは 広場にシャックを振る。
これは一種のです 共通のパラダイム
非同期を説明する。
これは実際に良いです シェイクシャックなどの理由
おいしいバーガーが顕著にある 彼らが何のために遅くなる。
しかし、ポイントは、彼らがしているである 受注をで本当に良い
そして後にあなたのお金を取る そのあなたが食べ物を待ちます。
だから、これは実際に優れている 代替よりもデザイン。
あなたが中に入るとしているため このようなお店、あなたが得た
行の先頭にして、 ご注文をし、あなたが欲しい
バーガーに、私ができる最善のように それは少なくとも5つを取り、伝える
分以上 実際にハンバーガーを得る。
だから、それは親切だろう 悪いビジネスモデル
あなたを待っている間であれば バーガー、アリス[想定スペル]
そしてボブは、[スペルを想定] とチャーリー[想定スペル]
と誰もがある あなたの後ろにキューイング
あなたは、文字通りブロックしている あなたの食糧を待っているライン。
だから、明らかに、シェイクシャックで
やその他のファーストフード 場所はこれをしない、
彼らはこのような何かを行う。
彼らはあなたにブザーを与える。
そして、彼らの並べ替え あなたの方法を送信します。
そして、彼らはであなたをコールバックする この小さなものを振動させる
またはあなたの注意を得るために点滅します。
だから、これは文字通り何ですか？
Node.jsのようなものがありません。
Node.jsのまたはJavaScriptの場合 より一般的に使用されている
プログラマー 十分にスマートである
実現するために、「あなたは何を知っていますか？
私は右行う必要がどのような ここではいくつかの数値を取ることができる
ミリ秒または秒の。
あなたは何を知っていますか？
私が先になく手放す 同期的に呼び出す -
「それは、ブロッキング男だ ラインの皆、 " -
私が先に行く聞かせて 並べ替え身を引く
と単純に自分自身を呼び出す
それは、長い実行しているとき 操作が完了しました。 "
そしてもちろん、コールバック この場合、ほのめかしている
コー​​ルバック関数に、 コー​​ドのチャックへの参照
それが実行されるでしょう あなたのハンバーガーには準備ができたとき、
あまりこのことのようにいくつかを持っている 機能の種類は、ビルトイン
それが振動を開始し、またはその それはあなたのための時が来たとき​​にブンブン
にコールバックされる 行の先頭。
だから、何がこれを行います 実質ベースで意味ですか？
まあ、我々がする必要 我々の方法を動作します。
だから、私は先に行ってみよう 最初これを行う。
サーバー1.jsでは、とさせて頂いております 最初のコードを簡素化
私たちは向かって赤ちゃんのステップを取ることができます より魅力的な問題。
これはまったく同じです。 私は前に書いたプログラム。
しかし、何が変更されました？
軽度のようなものがあります 構文上の違い
これとの間 一瞬前バージョン0。
何で飛び出し もしあなたが思い出して？
うんシンシアは[スペルを想定]？
[聞こえない備考]
うん。だから今、私たちはラインを持っている 関数は、渡されているの
私たちは、ソートを取り除く得ている
の無駄という ハンドラ関数。
前の点においてのみ役に立たない でも、一つの場所でそれを呼び出す
私は実際に必要はありません。 それに名前を与えて時間を無駄に
し、それが難しくなっ 一番下にコードトップをお読みください。
それでは、ただインラインを宣言してみましょう 無名関数です。
そして、私は2他のことをやっている。
私はより良い作ってるんだ ドット表記を使用する。
そうjQueryの、ノードの多くのよう 方法は、一緒に連鎖させることができます。
ようにするには、呼び出し終わったら 何か、あなたが持っていない
新しい行に待機する 別のメソッドを呼び出し、
あなただけの連鎖できる 一緒に。
だから、このように、我々はできる 実際にこれを引き締める。
だから、これは文字通り 5行で、Webサーバー
コー​​ド全体のとは違って -
何が正常かもしれないとは異なり、 何かをセットアップするためにしなければならない。
私は、サーバーに行けば 2さて、これを実行してみましょう。
サーバー2にある - 実際にしてみましょう そのサーバ2に戻ってくる。
レッツ今非同期0.jsを開いて、 手元にその問題に取り組む。
そこでまず、行こう 先にオープン
非同期0.jsブラウザに。
非同期0だから、私は手放す ブラウザに。
リロードを打つ。
そして今、これが一種である エラーメッセージの。
確かに私は500を見ている Chromeのインスペクタ。
しかし、より正確にさせて頂いております hello.txtを要求します。
[OK]をクリックします。そう、これが動作しているようです。
だから、非同期0.jsはしていないようです スラッシュのための何かを提供しています。
それはデフォルトのファイルをサポートしていません。
しかし、もし私が明示的に hello.txtを要求し、
つまり、サポートしているようだ。
これはなぜですか？
さて、どのような私がここに行ってきた
およびdone実装されています 超シンプルなWebサーバ
それはどこを示しています 非同期に役立ちます。
そして、それが実装されています 以下の通りである。
まず、私が使用しています HTTPモジュールを再度、
だけでなく、FSいる おそらくの略？
一般に、CS、ファイルシステム内。
[OK]をファイルシステム。
したがって前後、FS、ファイルシステム。
すべての権利、それがどうし これは私を与えるのでしょうか？
に関連する機能 渡されたばかりのようなファイルが、
書き込み、ファイルを開く ディレクトリ、読み出しディレクトリ
とかそういうの全て。
だから今、このコードに気付く 以前と同じですが、
渡して、サーバを作成 無名関数内。
これは、任意の一種である。
これは非常にではありません セキュリティで保護されたWebサーバー。
実際には、アクセスすることができました 私のハードドライブ上のほとんどすべてのファイル
またはサーバーのハードディスク上の このコードを実行することにより駆動する
私はただやみくもだから 私は行くよと仮定
どのようなユーザーをつかむために URLで要求された。
そして、私はするつもりだ ドットでそれを接頭辞
私はわずかだように、 安全である
言うことでどのようなファイルが彼らがすることができます 要求は、少なくともスタートしなければならない
現在のディレクトリに。
もちろん、ここでの脅威があります。
'原因なら、彼らの代わりに 何が含まれ？
そのパスでは、彼らは親切なことができます あまりにもそれを回避する。
ドット、ドット、右？
だから、ユーザーは単にドットを置く場合、 URL内のドット、理論的には、
彼らは取得を開始できた 私の - とパスワードファイルを言う。
そう、これは意図していません 固定されるように、
それは簡単なことを意図だ。
だからここに、私がどの変数を持っている ドットを連結したものである
現在のディレクトリである とリクエストURL
我々は前の見たどの スラッシュまたは/ hello.txtなどである。
だから今、それを取得 もう少し面白い。
まず、一番下に注目してください。
私が上で聞いている 前と同じポート。
だから本当の面白い 仕事はここでの内部です。
毎回リクエスト 自然に入ってくる
このコードの、私が何をやっている？
私は、ファイルを呼んでいる システムのファイルの読み取り方法、
パスを渡す 私が読みたいという。
そして今、これは ここに興味深いものだ、
これは実装によってである 非同期方式では。
あなたがリターンを得ることができない 読み出したファイルからの値。
実際の通知に、あります 無左側の式
読み込んだファイルの左側にある。
それは値を返しません。
むしろ、それはコールバックを呼び出し それは準備ができている機能
あなたの答えをお返しします。
だから、もう一度明確にする、 往年中のに対し、
多くのプログラミング中 あなたが望む場合には言語、
ファイルケースを読み取る ポイントPHPでは、
ファイルにアンダースコアを取得 内容を強調する、
あなたは左側の式を持っている 結局価値 -
等号の前に、 それはあなたが割り当てていることを意味
その変数への復帰 その関数の値。
あなたは、Node.jsの中でそれを行うことができ、 しかし、あなたは一般的に持っている
明示的に同期呼び出しする のような関数のバージョンでは、
私はそれが同期を読んでいると思う ファイルや同期がファイルを読み込む。
私は、彼らがそれを命名する方法を忘れていました。
そして、それは与えるだろう もし戻り値。
しかし、そのファイルがオンになっている場合 いくつかのリモート·ファイル·システム
またはディスクが、ただ自然に遅い それが10ミリ秒かかることがあります
またはそのファイルの2秒 実際に戻ってきて。
一方、他のウェブません 訪問者がサービスされている
あなたのwebsitによる​​。
あなたがブロックしています。
それはと呼ばれるものです IO、入力/出力を遮断する。
だからここに、これは非常に賢くなります。
どのようなNode.jsのが起こっているので、
解釈に基づい行うには フォローしている、
それが呼び出すために起こっている 読み込みファイル方式、
持っているファイルをバックアップ1にしよう 値Pで指定されたパス
してからであれば、それは準備ができたとき 内容をあなたにお返しする
ファイルPのではなく、コールする その署名である機能
慣例により、以下の。
二つの引数の最初の これ多分Errorオブジェクトであり、
資本Eは、それは、オブジェクトの エラーまたはNullと呼ばれる
そのようなエラーはありません。
2番目の引数は - 取る 推測では、 - どのようになるだろう？
それは、しかし、明らかに、データと呼ばれています データは、より具体的に何ですか？
>>内容？
>> hello.txtの内容 例では私が引っ張っ
一瞬前に私のブラウザに。
ファイルを読み出すように、換言すれば そして多くのNode.jsの機能
のように値を返しません。
彼らは、コールバックを呼び出し、渡す
これらのコールバックには何だろう 伝統的にされている
値を返す。
このアプローチの利点はある
あなたが呼び出す可能性があることを T0を提出ください。
コー​​ルバック関数マイト 1ティック後に呼び出すことはできません
だから、Tにおいてで話す T1000と呼ばれるかもしれない、
千は後に刻みます。
しかし、ポイントは、 このファイル内のコードの残り、
もしあれが直ちにだろう Node.jsの間に実行される
しばらくファイルシステム 読み方を見つけ出し
そのファイルとget それはあなたに戻って。
だから、これを作成する -
その効果的な錯覚
並列処理のさせながら、 低速の実行中のプロセスではありません
重要なものをブロックし、 利用者にサービスを提供している部分。
だから、どのように我々はこれを扱うのですか？
これは非常に一般的です Node.jsのパラダイム。
そして、ちょうど単純化する方法があります これが我々の前に一緒に表示されますです。
場合、私が最初にチェック エラーはNULLではありません。
だから、それは虚偽ではない場合 その後、エラーが発生しました。
私はそれが何であるかを知らない、 多分ファイルが存在しません。
私が権限を持っていませんでした。
パス名が間違っています。
物事の任意の数の 間違って行くことができます。
今のところ、私はするつもりだ 任意に500を返す
その内部サーバーエラーです。
何かが間違っていた。
私は全然気にしない それを診断する。
それでは、ただ言わせて ユーザーは、それが壊れて。
そして、私は行くよ res.endを行うには、
これは簡単な表記法である。
その最後を思い出して 私はres.writeをした時
そして私はres.endをしました。
あなただけしたい場合 出力の1行を送り、
あなたは一度だけでそれをすべて行うことができます 引数を指定してres.endと、
それは送信するために起こっている エラーメッセージはどのような
このオブジェクトの内部 ブラウザに。
それはかなりのアーク放電した 先ほど思い出す。
私は、これは何か分からない 一目見ただけで意味した。
しかし、私は要求されたとき 存在しなかったファイル -
おっと、我々は実行する必要があります サーバーを再び。
私は、ファイルを要求され​​たとき 存在していなかったこと、EISDIR、
これについて何か それがディレクトリであること、
私はいくつかのランダムをすれば そこに文字列、
どうやらそれは意味 ファイルがあっても存在しません。
そして、それはだから、私のコード 単純に書くことと言っている
どのような生のうち エラーメッセージは、ある
そうではない非常にユーザーフレンドリー しかし、少なくとも、私はそれを処理しています。
そうでなければ、それがなかった場合 私は何をやっているエラー？
唾前と同じこと 200 OKうち、平野 -
テキスト/平野心のタイプと そのデータを吐き出す。
そして、私が得ている理由です hello.txtの内容だけ
私が見てどうかを確認する hello.txtで、
それだけで、文字通りです こんにちは、世界。
そして私はこれを変更した場合 こんにちは、世界、ファイルを保存し、
サーバーを再実行し、 ページをリロードします。
今、私はそのバージョンを取得します。
だから、私は本当にしました Webサーバーを再実装
多数のために存在しているように 年が、node.js.を使用して
しかし、我々はこれを行うことができます さらにきれいに。
私は非同期1.jsを開いてみましょう。
今、私は追加しているに気づく 別のモジュール今回は、
どうやら経路モジュール。
さて、これは良いです 見る機会
どのようなドキュメントで のように見えます。
Node.jsのドキュメントです。
PHPのように私はあると思う 実際にはかなり良い
そしてまっすぐ進む。
私はNode.jsのとGoogleに進みます そしてNode.jsのパスを検索し、
何が通常表示されます URLへの直接リンクです。
私は一瞬前にここを我慢すること。
だから、/ APIは、公式の場所です ドキュメントについては、どこへ行くか。
そして何を一番上に表示されます
ノードの公式ドキュメントの すべてのメソッドとある
内部またはプロパティ この特定のモジュール、
の1は、結合と呼ばれています。
そして参加ヘルパー関数です それは私ができるようになるだろう
と気にしないように すべてプラス。
そして、それは追加されています あなたが見るようにボーナス
ドックからでもある 結果のパスを正規化します。
だから、ユーザーまたはあなたがドットを持っている場合 ドットドットまたは任意の組合せまたは
相対それらの種類の 五分五分の間の経路、
参加方法のそれである それはすべてのことをクリーンアップするために起こっている
そしてあなたに正規を与える 任意のないパス
これらのドットやドットのドット。
だから、それはで良いことだ 少なくともセキュリティのための一般的な
あなたがチェックしている場合は、 私ではない戻り値
この特定の単純なケースでは。
しかし、私はそれを使用したいと思った。
だから、私は今、パスAを作成 もう少しプログラムで
代わりpath.joinと 生連結の。
だから、それは少しだ 前よりもきれい。
そして今、私がいるよ気付い もう少しインテリジェントではなく
やみくもより ファイルを読み込もうとすると、
私は実際に行くよ fs.statを呼び出します。
だから、あなたは精通している場合は、
低レベルとC 関数やC、PHPでも。
ライブラリの多くは持っている この関数は、STATが戻る
本質的に統計 ファイルに対する、ファイル·サイズ、
パーミッション、名前 そのようなもの、
また、暗黙的であれば ファイルが存在するか、
それは、ファイルまたはディレクトリの場合
またはシンボリック·リンク または何か他のもの。
だから今私は、注意してください fs.statを呼び出す。
してから明らかに応じ ドキュメントへの、
私は戻って取得する必要があり Errorオブジェクト内
またはNullが続いた 統計オブジェクトによる。
しかし、ここでは、これをチェックしてみましょう、 node.js.fs.
ここにファイルがある システムのマニュアル。
私は統計を探してみましょう。
もっとたくさんある ここでの機能。
おっと、そのSTAT同期、fs.stat。
だからここに、それは非同期だ データ（2）。
もしあれば、それは意味だ メインページから覚えて、
メインページの第2章
つまり、これは、文字通りあることを意味します 単にノードの実装
低レベルの システム関数STAT。
だから、コールバックは2を取得します 引数、エラーおよびSTAT
STATが入り fs.Statsのオブジェクト。
それでは、どのようにこのオブジェクトを見てみましょう 見えるようになっている。
のハイパーリンクをクリックしてみましょう そして私はそれを参照してください。
統計オブジェクトが含まれています 明らかに、いくつかのヘルパーメソッド、
ファイルは、あるディレクトリであり、 他のものの束。
それは、私は気にされる」「ファイルの この特定のケースでは約。
だからここに私は行く。
エラーが発生しました場合は、 私はちょうどこの時間を保釈しましょう
と想定しています。
エラーがあれば、それがあった おそらく404ファイルが見つかりません。
それは何か他のものかもしれない
しかし、私は少しいるよ ジャストフォーカスするには、ここをクリック怠惰
もっと面白いの詳細について。
しかし、ユーザーのための 目的は、ファイルが見つからない場合、
何らかのエラーがあった場合は、 ファイルを述べる。
そうでなければ、なら、私に確認してみましょう ファイルには、確かに実際のファイルである。
だからではない場合 ファイル、それが存在しています。
そこに何かがあるが、 それはおそらく、ディレクトリの
それともシンボリックリンク
または何か他のものだということ ファイルシステム上のファンキー。
いずれにしても、ユーザは それを見るべきではありません。
だから今、私は吐くつもりだ
従来は外 403不正。
しかし、再びちょうど大会、
私が使用している可能性 理論的には何か他のもの。
した後、最後に、私をさせ ファイルを読み込もうとします。
だから、私は下にスクロールしてみましょう。
そして今、これは注目してください コー​​ドは少し乱雑を得ることができ、
私が呼んでいることに気付く fs.readFile通過
同じパスに、同じ 前回とコールバック、
これ以前のバージョン。
そして私は見つけたい場合 -
私はそれが見つからない場合は、 私は500の外に吐き出す。
そして、私はそれを見つけられた場合、どのような ライン私たちは、ここを参照してくださいするつもりですか？
私たちは、FSを参照してくださいするつもりだ おそらくヘッダ200を書き込む
および送信res.end 実際のデータ。
しかし、これに気づく。
そして、これは実証的ではありません 最悪のシナリオである。
しかし、私はこのSTAT呼び出しを持っている ここで私はいくつかのものを持っているよりも。
その後、私は別のを持っている ここで非同期呼び出し、
ので、より多くのインデント。
そう、だけの種類の外挿 ここからあなたができれば。
何が問題で発生する傾向がある JavaScriptのような言語
この環境ではどこに あなたは、戻り値がありません
むしろ、あなたが持っている これらのコールバック。
そしてもちろん、これは単なるです 文体のものという事実
私はインデントしておくこと。
しかし、これを取る 論理的な次のステップ。
1かがあったとします 二、三の他の機能
私はそれを実行するために必要なこと 自然非同期であったが、
そのため、あなただけの種類 それらを処理するためにインデント維持、
それらを処理するために、それらを処理する。
あなたは、コールバックのようなものを取得する 人々はそれを呼び出すように地獄
あなたのコードでは、開始する場所 非常に広い取得する
と率直に読み本当に難しい。
そのまま、私はかろうじての並べ替えることができます これは一種の流れであることを告げる
つまり、この種を持っている
文体角度付きの 事がここで起こって。
だから、これは理想的ではありません これは非常に迅速になることができます
扱いにくい、たとえ2 非同期ではなく呼び出し
このような大したこと。
だから、我々は正しい、これを避けるためだろうか？
あなたはそれを垣間見たかもしれ 私は先ほどmisclicked。
資料では、あなたが知っている、 statSyncがあるように見えます。
そしてstatSyncはかかりません 引数としてコールバック。
それだけで、パスがかかるため それは明らかに何をしますか？
これは、インスタンスを返す fs.Statsのの。
だから、これはあなたかもしれません 最初の本能は、右？
特に場合はコールバック関数
と非同期である あなたに少し新しい、率直に言って、
最も簡単な方法と考えられる ただ、すべての問題を回避
一緒に、並べ替えに戻る CS101のスタイルのプログラミングの
あなたは関数を呼び出す場合や、 この方法では、値を返す、
関数を呼び出し、戻り 値、
この関数は、値を返します。
そして、私はそのため使用することができます fs.statSync
文字通り同じである それは同期バージョンです
これが返す意味 値。
それが通過しない コー​​ルバックへの値。
しかし、なぜそれはおそらくだろう リゾートへの次善の回避策
同期機能に？
うん？
[聞こえない備考]
正確に、それは長い時間がかかります。
あなただけ減速している すべてダウン。
あまりシェイクシャック好きだから あるいはおいしいバーガー、それらは処分した場合には
これらのブザーのあなたを作った、 顧客が前面に立つ
ラインのあなたの食べ物の準備ができるまで 偶数次を取る前に
後ろの人の 明らかにあなた
スループット速度が低下します。
人々が残して開始し、 あなたは、ソートのパケットを描く。
あなたはいくつでも作ることができる ここアナロジーの。
しかし、簡単に言えば、それはだ おそらくない良いこと
ビジネスやサーバー用。
だから、非同期コードです 少なくとも、一般的に良い
この場合には、それは間違いなく いくつかの不安の原因を開始します。
実際、私が言ってみたとき 最初のこのようなものを書いて、
それは少しを取るよ 慣れる少し。
それでは、装備することから始めましょう いくつかのライブラリを使用すると、
と技術を加えて この少し楽。
だから、最も一般的なの1 ライブラリは、人気のライブラリです
最近では、この 1はasync.jsと呼ばれる。
そしてNode.jsの多くのように ライブラリやモジュール、
これらはすべてオープンソースです。
彼らはほとんどすべてのライブとget 一種であるハブのリポジトリ
事実上なる これらのことを格納する場所。
して、そこ インフラ全体
これらのものをインストールするための NPMは、ノードパッケージマネージャと呼ばれる
これを使用して精通している場合は、 EvanTubeは優しいと
のようなアプリケーションやAPPの取得。
あなたが精通している場合 Red HatとFedoraのと
アプライアンスのように、 それはYUMのようなものだ。
しかし、それは、ノードの - それはだ パッケージマネージャだけ
この特定の環境のために。
そこで、我々はダウンロードしてインストールすることができます 非同期ライブラリのようなもの
また別の1と呼ばれる ライブラリまたはモジュールを強調している。
しかし、これらの限りFS、HTTP、パス、
それらは、すべての来ている ノードに組み込まれています。
だから我々は、APIドキュメントに行けば、 あなたが実際にそれが組み込まれて表示されます
ノードには、無料で入手する モジュールの全体の束。
しかし、いい人がたくさんに インターネットは数十人をした
何百ものではないかの 他のライブラリ
良いことを行う 又は異なる。
それでは、見てみましょう このライブラリがどのように動作する。
だから、このコードのほとんどはある 一瞬で同一。
私はされてパスを持っている トップを作成しました。
そして今、私が呼んでいる async.series。
だから、非同期ライブラリが、それはだ あなたを可能にするだけのライブラリ
通常の合格または調達する 1呼び出されるように機能する
だけの種類を次々 そのインデントの問題を回避するには、
そして実際には精神的な 必ず生じてしまう不安
少なくともときに最初に 自分でこれへのダイブ
非同期プログラミング。
余談では、撮​​影したかのように 161あなたがロックを扱ってきた
規約とすべてを調達 その、非同期コードの
とのような環境 Node.jsのは、はるかに実際に、
はるかに簡単な間違いなく
実際に書くより マルチスレッド·コード。
いつでもあなたが持っている マルチスレッド·コード、
あなたは昇給の条件を持っている。
あなたが心配する必要は 含む2のスレッド
同じリソースを ディスクやメモリ。
JavaScriptを美し
Node.jsの中にありますあり 文字通りつのスレッドだけ、
ブラウザを意味する
またはサーバができるだけで 一度に一つのことを行う。
それはちょうどあなた次第です、 プログラマ
のためのメンタルモデルを維持する どのようにキューの事のあなたの並べ替え
と方法を見つけ出す あなたのコードを注文する。
しかし、あなたが心配する必要はありません 約条件を上げる
で全く同じように このような生のコードを有する少なくとも。
だから、それは少しだ ここgrackするのは難しい。
しかし - だから私は開いてみましょう ちょっとドキュメント。
async.jsライブラリれる 同様に、非常にgoogleableです
それはGitHubのに住んでいる そのうちの多くのように植え替える。
それはないと思う 大ざっぱ、そうではありません。
私は下にスクロールしてみましょう ここにお読み。
そのため、非同期ライブラリ がっつりを提供しています
その中のメソッドの。
例えば、あります 各呼ばれる方法、
その私は、これをクリックすると 一瞬、そのドキュメントを表示するには、
これは、関数やメソッドです それはあなたが何かをすることができます
4それぞれのような しかし、並行して。
彼らはすべての起きようとしている 潜在的に並行して。
各メソッドだけです あなたに戻るために行くときに、すべての
の反復が完了している。
そのため、おそらく彼らは起こる 次々に。
理想的には、彼らが起こる 本質的に並行して。
しかし、この方法ではない あなたをコールバック。
それはあなたのバズはありません すべてまで、ブザー
あなたが持っている要素の をかけて完成している反復。
だから、それはちょうど良い方法です
使用して回避する シンプルな4ループ
しかし、実際にやって 何か非同期で。
しかし、今、より直接的 この例に関連し、
これがあるのに気付く シリーズ方式。
そして、私はちょうどプルアップしましょう シンプルな標準的な例。
だから、非同期ライブラリシリーズ 暗黙の方法での受け取り
配列内の角括弧で。
データはどのようなものがあります 要素のタイプ
この配列に基づいて、 簡単な例か？
これは関数の配列です。
だからCでは、呼び出します それらは、関数ポインタ。
JavaScriptでは、より多くがある 正しく関数への参照
または匿名関数。
そして、これは単に、配列を意味し、
もちろん順序付けされ アップ時にゼロから。
だから、彼らは維持している 良い順
シリーズでは、 '原因シリーズ もちろん手段は何かを
順序ではない並列に。
そう、これはまさに、このことを意味する 関数が実行されてしまいます、
次いで、これは、この オン、これは、この一
しかしたくさんある
最終的にはオプションになるまで コー​​ルバックが呼び出されます。
だから、ここのパラダイムに気づく。
とにもかかわらず、この 1男のライブラリです、
それは代表だ 非常に一般的なJavaScriptのパラダイム
の再コールバックを使用。
だから、あなたがここで何をすべきかがわかります。
最初の関数であることに この配列を経由して渡された、
匿名を定義した 単に関数を持つ関数。
どうやらしかし予告その この文書によると、
無名関数は、必要があること 引数のコールバックを取る。
つまり、ポインタになるだろう または関数への参照
ときにあなたが呼び出す必要があること コー​​ドは値を返す準備ができています。
ので、もう一度だけのためとは違って 通常、手続き型プログラミング
あなたがするために使用している場合、 すぐに値を返す
それと1の違い このようなライブラリを使用して
非同期プログラミングの詳細 準備ができたら、一般的に、ある
から値を返す ファイルからデータベース、
算術から 表情、それはあなた次第です
コー​​ルバック関数を呼び出します。
といいこと このライブラリについて
私たちは、ドキュメントを読めば より慎重つまり、
場合にのみ、すべての場合 と呼ばれるコールバックエリア
Errorオブジェクトのない、 全部が成功するのだろうか？
そのように、換言すれば、 図2は、存在する場合
匿名の10がある場合 機能
この配列内のそのため このシリーズでは、
それらのすべてが成功した場合にのみ、
最終的なオプションのコールウィル 成功したと見なされる？
それらのいずれかの 失敗した場合、すべての関数
それはないでしょう後 でも実行すること。
だから、それは一種の素晴らしい方法です デイジーチェーンを有する
それが途中で中止されます 何かがうまくいかない場合。
だからここに、コンテキスト内でこれを見て 我々は再実装する方法です。
その前のプログラム。
私は、以前のようにパスを取得 これは簡単な部分です。
私は、このスケルトンコードをコピー＆ペースト
そこの資料から async.series開き括弧、
角括弧を開きます。
そして今、私は1を持って注意してください この初めに機能
第二に、我々が表示されます 我々はこのから行くところ。
そして今、それはだ、気づく 最初は少し複雑
ちょうど焦点を合わせる それが一行ずつ。
Fs.stat統計情報を得ることを意味 またはそのパスのものではありません。
準備ができたら、このコールバックを呼び出します。
このコードは、前と同じである。
エラーがあれば、 今1つの違いはあります。
繰り返しますが、非常に一般的なパラダイム Node.jsのプログラミングである
何かがうまくいかない場合や コー​​ルバックは、知っている必要があります
慣例により、最初にその コー​​ルバックへの引数が起こっている
すべてがうまくある場合や、NOと Errorオブジェクトへの参照、
資本E.は、エラーのようなものだ 世界的に存在するクラス
それについての詳細 改めて。
したがって、このようにすると、があるかどう エラー、意味するところは何ですか？
さて、私に基づいて シリーズはないと述べた、
何でもありはれて 間違った、私たちはちょっと欲しい
シリーズ全体を中止するには 無名関数呼び出しの。
だから、それはに私のために十分である ただ、コールバックの受け渡しを返す
Errorオブジェクト内。
STATが与えた場合、以下の原因 私バックのエラー、
私は新しいを作成することができます 私自身のエラーオブジェクト、
私は本当に、と気にしない
私は何でも渡したい エラーが実際に起こっていることである
私はそれを渡すことができます このコールバックへ。
そして、ちょうど明確にすること、 リターンは必ずしも必要ではありません。
私は基本的にこれをやってみたい しかし、私は今 "を返しますたかった。
/ /これ以上のことにより、 ここでは、コード」を実行する。
だから、もう一度、別の一般的な JavaScriptで大会、
あなたがわからないにもかかわらず、 それ自体は値を返す、
あなたは値を渡したい コー​​ルバック関数へ
しかし、あなたが欲しい 実行を停止する
あなたがしている機能の 些細なやり方で
これを実行するには、単にある 呼び出すためにここに戻って。
しかし、何の問題もありません、
我々だけで、リターンコールバックをやっている それが起こっているのにもかかわらず、エラー
未定義の値に戻ります。
大丈夫、これがない 最も可能性の高い値を返します。
私が気にすべてがある さらに、実行に搭乗。
したがって、これらの私の混淆 2行は単なるスタイリスト
条約だけに 行の数を持っている
コー​​ドの私は書いた 2から1。
だから他に何？
エラーがあるではない場合 -
実際に明確にする 私も避けることができます
その場合、他の操作を行って。
しかし、再び、別の 一般的なパラダイムは、チェックです
あなたのエラーの最大トップしてから ただ返すのではなく、継続
を使用してコードをインデントする よそとよそとよそ。
だからではない場合 ファイルには、今、あなたが知っている、
私はこれを処理したい ちょっと特別。
だからここにJavaやC + +のよう またはいくつかの他の言語、
ここにインスタンス化することができる方法です エラーの受け渡しを入力することを目的と
デフォルトのメッセージに のではないファイル
これはただです ある程度任意。
しかし、私は、シグナリングよ 私自身のエラー。
そして、これは、最後は何を ラインはおそらく意味？
すべてが順調です。
あなたがのためにnullを渡した場合 エラーパラメータ、それだけで意味
慣例により、すべてが順調です。
だから、それが何を意味するのか 論理的に起こるのだろうか？
NULLが渡された場合 コー​​ルバックへ
つまり、この匿名の意味 この関数は成功しました
いわば。
だから、何すべきシリーズ この方法は、先行し、今や基づいて行う
以前の私の言葉の定義について？
[聞こえない備考]
右、次のものに移動しますか？
それがnull以外を返していた場合 値は、それだけで中止になる
これ以上匿名 関数が呼び出されます。
しかし、それは、その後、していないため、 これは次の呼び出されます。
だから、ここでのロジックがある ほとんど前と同じ
そして我々はきれいにする方法を説明します さらにこの最大瞬間に。
私はこれがたくさんのようなものであると認識
口頭ですべてを吸収する 視覚的。
しかし、今、第二に気付く 私が欲しい無名関数
直列に実行させることである ファイルを読み込もうとする。
このコールバックを呼び出す あなたは準備ができたら。
エラーがあるとすれば、まさに コー​​ルバックを介して、それを知らせる
そのため、残りの このようなものは中止されます。
それ以外はnullを返す。
しかし、なぜ私が通っています 2引数内？
さて私は読んでいる場合は、この時点 ファイルと取り戻す
変数は、データと呼ばれるよう
私が意味するだけでなく、したい すべてはNULLを返すことで順調です
最初の引数に。
私が実際に返すようにしたい 第二引数のデータ。
ので、私はさらに読めば ドキュメントの、
このコードの最後のチャンクに気付く 角括弧は、それがあることを意味
シリーズの最後。
唯一の2の匿名があった このシリーズの機能。
エラーは、ここであった場合、次いで 私が知っているリンクの1
このチェーンで非常に 話すことができなかった。
そのように、換言すれば、このエラー Errorオブジェクトになるだろう
いずれの場合にはnullになります これらの人のために失敗しました。
そのような場合と、私はちょうどよ 救済しようとしてと私は行くよ
400回答をした リクエストは失敗を意味し、
それは非常に一般的です エラーメッセージが表示されます。
そして、私はするつもりだ エラーメッセージを出力します。
だから、私は気にしないよ 今回のスーパー肛門も、
私は区別するつもりはない 500と404と403の間で、
私は一種のだ 盲目的に私の手を振る
何かが間違っていたと言う。
しかし、何もなかった場合には、間違って行く
私はこれを送るつもりだ このデータを渡すres.end。
さて、これは少し不可解に見える。
しかし、再び、私は読んでいる場合 ドキュメント、
二番目の引数 この最終、最後のコールバック、
のみ実行だ男 シリーズが完了すると
そこに実行するか、または部分 のは、これは配列になるだろう
第二引数のすべての
渡されたこと コー​​ルバックへ。
今、それはことが判明 このシリーズでは唯一とリンク
それは実際には第二に戻る 引数は、ここで、この1である。
だから私は、上のソートするつもりだ 信仰の飛躍が単純と仮定する使用
一瞬、その 最後の方法は、
それはあなたの最後を与え 配列の要素。
このため、アレイ それが渡されるのは
私には2なインデックスを持っている、 ゼロと1。
それはちょうどゼロの値がありません この男は返すから -
第二に通過しない 引数が、この男はありません。
、ブラケット、結果 ゼロは何もありません、
結果ブラケット1 何が含まれている、
次のしてきた場合には ここまで一緒に？
ファイル、こんにちは、 おそらく世界のコンテンツ、
だから、実際にどのように私です それを印刷。
そして私を終了させ ここ1ディテール。
私は古いのこの種のことを行う場合 学校、私が取得したい場合は、
最後の要素で、私はできれば 結果は[results.length-1]を行い、
それは一種のだ 古い学校の方法
最後の要素にアクセスする 中 - またはゼロインデックス配列。
しかし、サイドのように思い出す 私は、このライブラリを持っていたこと
ここに最大でどのアンダースコア 大会はちょうどと呼ばれ
文字通りアンダースコア 特別なものではありません文字、
それだけのようにクールに見えます ドル記号は、jQueryのために行います。
これは単なるヘルパーです この方法は、最後のドットを強調
それは正確に行います 同じこと。
そして、あなたはそれを使ったことがない場合は、 前に両方のJSを強調
クライアント側の符号化のための
サーバ側である 素晴らしく便利なライブラリ
記載されているような多くの人々 それjQueryがすべて含まれていますように
方法のうち、人々が望んだ JavaScriptの自体に付属している。
[OK]をクリックします。
>>だから、私にはかなりのようなと 私は、直列に見ていた、
あなたは、コールバックのように持っている 引数として？
>>はい。
>>ようなので、ときに 実際に、プッシュような
そしてそれを何のような あなただけがある場合を意味する
コー​​ルバックのような、次に好きです -
[聞こえない備考]
>> [OK]を、良い質問。
だから、私はプルアップしましょう ここで非同期メインページ
またはGetHubのドキュメント。
だから、これは正規である 構造。
あなたは、コール、これを使用している場合 特定のメソッドシリーズ、
それには2つの大きな部分があります。
1つは、配列です 匿名関数
および2は、最終的なコールバックです 実際の機能は
非常に実行 シリーズの最後。
今、私たちはズームインするとき、 最初に少し近づく
それらの大きいものの、 無名関数の配列
この要件によって 男のドキュメントがあります
匿名であるために とる関数
1引数と呼ばれるコールバックで またはfooやバー、それは重要ではありません
しかし、彼は、コールバックと呼んだ。
そして、これはあなたのブザーのようなものです。 シェイクシャックはあなたを渡すこと。
これは手段です あなたは値を返すことができます
顧客へのあなたのため 文字通り戻って行うことはできません。
次の方法でそれをしなければならない このコールバックの方法。
このため、内部の場合 この関数は、いくつかの遅い稼働中である
クエリのデータベースのようなコードの読み取り ファイルシステムからファイル、
あなたはそこまで待てない そして皆をブロック、
あなたは、コールバックを呼び出したい。
だから、これは文字通り 引数の名前。
しかし、あなたは、C言語のように 関数ポインタを持っている。
Javaではあなたが持っている 参照系のメソッド
ここJavaScriptで同じ。
これは可変ですが、 その型は関数です。
だから、単純にその名前を書き込むことにより、 コー​​ルバックやfooのか
またはバーは、左かっこ と閉じ括弧、
あなたはそれを実行している その関数に。
とヌルを渡している ヌルエラーと1を意味し、
これは、これがあることを意味 私はインチ渡したいデータ
して、チャンクは、明確にする これは別のコールバックです。
そして、それは、コールバックと呼ば​​れるではないが、
それだけで、概念的である コー​​ルバックメソッドの機能
それが呼び出されるので、 定義により
この著者のライブラリーのとき シリーズ全体が完了しました
かどうか、そのサブセット エラーが早く起こった。
そのため、コールバック関数の名前、 コー​​ルバック関数を呼び出して、
コー​​ルバック関数の名前、 コー​​ルバック関数を呼び出して、
異なるコールバック 一緒にすべての機能。
>>我々は今のように持っている コー​​ルバックを定義？
>>いいえ、なぜならこの男 あなたの配列に渡します
匿名関数の、
コー​​ドへのポインタ 彼が実行したいと考えています。
正確には、すべての権利。
だから、と言ってください コー​​ドは少し単純で取得します。
だから、それは可能です。
そして、あなたが私に似ている場合には、取り 少なくとも知ることに快適さ、
それはにしばらく時間がかかります これに慣れる。
しかし、我々はきれいにすることができる このアップ少し、
あなたにであまりにも多くをスローするようにしない しかし、ここで別のバリエーションです
その他の方法を用いて
同じライブラリ内の 滝と呼ばれる。
の利点はある シリーズとは異なり、ここで各
これらの匿名の 本質的に実行される機能
独立の 他の人のそれぞれ。
名前を示唆しているような滝 最上の機能を可能にする
種類の値を渡す LOWER関数に、
水のカスケードのような、一種の。
だから、これの上側 私は親切なことができるということです
私の利点にこれを使用しています。
async.waterfallにおいて、 以下の点に注意してください。
私はちょうどfs.statを呼び出すことができます パスを渡す
私が取得したいこと に関する統計。
そして私の前に覚えている 無名関数を持っていた
つまり、2つの引数を誤る持っていた、
esultsし、私は呼ばれる コー​​ルバック関数を手動で？
言い換えればちょうどなることです 明確な、それ以前を思い出す
非同期2に、私はすべてやった この厄介な仕事の。
私は、fs.stat Pに渡されたと呼ばれる
私自身の匿名と宣言 機能。
エラーがある場合、私はその後にチェック nullでないし、私はこれをしなかった、
他の私は、全体にそれをした 次の表記の美しさ
Node.jsの中でそのコールバックであるように 一般的な機能は意図されている
少なくとも1つの引数を取るために、 ゼロが続くErrorオブジェクト
以上の有用な値。
だから、ここのパラダイムに気づく
私は、このコールバック関数 宣言は、正確には次の
パラダイム、この男の 非同期ライブラリはありません。
これを言うためにである、なぜAM 私は自分のコールバックを実装する
方法と、このの著者 ライブラリには、文字通り私に手渡している
プラッタ上のいわば、A コー​​ルバック関数は、私が使用できますか？
だから、私はただで渡すことができます 参照は、彼は私に与えられたのは
その結果、すぐに、 私のいくつかの行
コー​​ドの1行のコードになります。
今、どこにこれで行くのですか？
次の関数こと 私が実行したい、
次の匿名 この配列の機能
関数の次のことを行います。
最初のSTATをであることに注意してください 最初の引数。
だから、何かがあります すでに変更しました。
今、この男は誰 ライブラリを書いた -
と私は男を言っている それは男だからです。
このライブラリを書いたこの男 ドキュメントを保証している
ここにいる場合は、この機能すること 私は戻ってErrorオブジェクトを渡します
またはnull昏睡続く 他の値のリストを区切り、
彼は確かに、これらのことを行います その他の値は利きです
この無名関数へ 左から右に順に。
そして、何がちょうどように使用される 単独のコールバック関数だけで
最後のような引数になります。
今、私は私が誰か分からない に焦点を当て、ちょうどあなたが知っている。
しかし、今、何が ここ奪う？
そこで、我々は知っているから ドキュメンテーション
または例の前のカップル
そのfs.statは、最終的には期待して 2引数を指定して、コールバック、
あるErrorオブジェクト Errorオブジェクトはnullに続く
統計オブジェクトへの参照によって。
私はそれについて考えるのであれば、 Errorオブジェクトコマ統計オブジェクト、
つまり、パラダイムに収まる この人のライブラリの。
だから、私は単純に言うことができますので、 私のない第二引数
起こっていること - それは、その fs.statによって渡される
コー​​ルバックに、ERR統計です このライブラリの定義によって、
私は2番目を置くことができます ここで、引数の名前
または何でも私はそれを名前を変更することができます
私が続くかどうか ここにコールバック。
だから、私は1を渡すことができます ここからここまでの値。
さて、このコードのすべては、しかし ある確かにやや不可解
少なくとも用ペーストをコピー 前からほとんどの部分。
唯一の違いは、通知で ここで私はエラーを宣言しています
オブジェクトと、今私が欲しい 少し手の込んだ取得する。
私は実際に何を知ってほしい エラーがあったので、私は行くよ
このオブジェクトAの内側に押し込む 任意のコードと呼ばれるプロパティ
私はことを知っているように、 これはファイルではありません
それは、不正である必要があり、 それは、HTTP 403です。
私は前にそれを思い出してみましょう 私は、Errorオブジェクトを渡します
コー​​ルバックへ。
してから、最後に読んでみてください ファイルので、この場合には、
滝は、私が壊れました 二つの大きなステップからのコード
3小さなステップに。
ここに美しさに注目して、
私はfs.readFileを呼び出すことができます パスを渡す。
して、難しい部分 精神的に、私はちょうど通過している
男のコールバックで。
彼が私を渡すだ事は、私は今 fs.readFileに渡すつもり。
我々はすべてが付着しているので 同じ規則に、
コー​​ルバックの最初の引数はある Errorオブジェクトはnullに続く
昏睡によって又は分離 有用なもののリスト。
だから、それは今とあれば何を意味するのか、私 私は知っているよドキュメントを読む
この、非常に最後のコールバック、 ここでこの男は外で
角括弧の予定です Errorオブジェクトに渡される
私は確認する必要がありますまたはnull いつものように、ここで、このコードを使用して。
してから、定義により このメソッドの
男のドキュメントで、 最後の値が返さ
最後のメソッドから 私の無名配列中 -
無名関数の私の配列。
だから、何ファイル戻しを読んでいない
と私はリターンを使用しています 緩くなりました。
私が読んで何を意味する 引数としてファイルパス
コー​​ルバックメソッドに その利き？
二つの引数、最初のものである Errorオブジェクトはnull、
それはほとんどの場合です その答えになるだろう。
そして2つ目は起こっている 何が読み出されたファイルのためのものか？
ファイルの内容は、 我々は以前のそれと呼ばれるように、データ。
だから、単純に宣言することで、 ERR、その結果、
とエラーのためにこれをチェックする 退屈な一種のは今です。
そうでなければ、私はres.endを行う その結果を渡す。
これは間違いなくなります 完全に同期していない
するまで、実際に それは自分で書く。
しかし、今のところ、取り 離れて、少なくとも事実
これは明らかに存在することを 一般的なパラダイム、それによって我々の場合
とライブラリの作者 スティックのすべての並べ替え
この条約で コー​​ルバックメソッドの。
そして、最初の引数は Errorオブジェクトはnull。
第2および第3の
第四のオブジェクトは、ものです 我々は気にして私たちの並べ替え
の規則に従い、 マニュアルを参照してください。
我々は、コードを開始すること 正直かなり醜いです。
とにもかかわらず、最新の 例では、この種のハード率直である
あなたの心を包み込むように、 それは、少なくとも視覚的だ
それははるかに厳しいように見えます。
そして、あなたが快適に一度 それと、これはそんなに簡単だ
そしてそれはそんなににくいのです その前の例よりもバグ。
だから、私は実証せ ここで最後にひとつ。
これは、バージョン3である。
と - いいえ、のままにしてみましょう これだけで1。
私はいくつに行こう 体操など、他の最後のもの。
大丈夫なので、サーバ2。
[OK]をクリックします。まず、ご質問、 私はこれがたくさんある知っている
しかし、あなたはより多くを望んでいた 命令、そう？
あなたは良い言っていない 必ずしも命令。
うん？
[聞こえない備考]
正しい、あなたは基本的にしている オペレーティングシステムに甘い
ジャグリングする方法を理解 一度にこれらのボールをすべて、
ファイルからの読み取り、 データベースからの読み取り。
そして、それはこのJavaScript、サーバの それ自体、それはシングルスレッドです。
そして、基本的に、実際に、
1画像があります 私はスローされませんでした、
そしてそれは必ずしもありません すべてのこと啓発
多分、我々は与えるでしょう あなたメンタルモデル。
JavaScriptの自身とノード
特に、これを有する そのイベントループと呼ばれる。
それによって、あなたが考えることができます Node.jsのは、プログラム、
文字通りのようなものです 無限ループ。
それは待っているだけ野生のループの そして待って待って、
完了するのタスクについて。
タスクは、行くことがあります データベースから何かをフェッチ
または、ここからの値です データベースまたはこのファイルを取りに行く
ディスクまたはここにある ユーザからの要求。
ちょうどのようなイベントの任意の並べ替え、 ブラウザイベントが駆動され、
ようにサーバー サイドイベントを駆動。
そしてそれらのもののいずれか イベントを構成している。
Node.jsの中のSO誰かだけ 無限ループを書いた、
大きな野生のループ、待機中 ものが起こるため。
とスタッフが起こるんように、 右、キューで終わる？
確かに、データベース 値を返す可能性があります。
およびファイルシステム、オペレーティング システムは値を返すことがあります
ほぼ同時に おそらくそこに起こっている
それにはいくつかの順序であると。
そしてNode.jsのは、しようとしている 基本的にキューを持っている
大きなアレイ等 ベクトル、いくつかのデータ構造
つまり、すべてのバッファ それらのものの。
それは文字通り唯一の可能性があるため 一度にそれらのいずれかを取り扱う。
だから、ときに、開発者は、
非同期JavaScriptを書いて 非同期を使用したコード
機能には、これを許可しないことをしている どこへ行くか、いわゆるイベントループ
次のティックに、右か？
だから、あなた限り、すぐに など、すべて返す
これらの非同期メソッドの 読み込んだファイルおよびSTAT好きです、
彼らはすぐに戻ります なぜなら、最終的にコールバック
戻る。
とすぐに返すように、
つまり、他の誰かができることを意味します ここにストックからポップ取得
またはそれがポップ得ることができること ここで、キューの先頭にある。
だから、の中にある 実際のシリアル化
何が起こっているすべてのもの、
にもかかわらず、これらすべてのもの 並行して起こっていることができます
マルチスレッドシ​​ステム上の。
それ自体Node.jsのと サーバが実行していた
1スレッドと。
そして、それのマイナス面がある あなたは、必ずしも最大ませんトン
お使いのコンピュータのうち 機能は、特にです
あなたは16コアを持っている場合、または でも、2コアのコンピュータ
とするだけで実行している ノードの1インスタンス。
しかし、あなたがもう一度している場合 161のようなものを撮影し、
あなたが巨大な悪夢を避ける それが来るとき頭痛の
条件やレースする ロックとセマフォ
真に書き込み マルチスレッド·コード、
そう五分五分とマイナス面。
[OK]をクリックします。だから、ここに戻ってコードに、 私は、我々が開始することを提案してみましょう
物事を少し単純化することができます。
私たちは、サーバ1を少し見ました 前これは、このように見えた。
だから、それは間違いなくです とてもシンプル。
しかし、単に世界のような PHPは、フレームワークがあります
Laravel等であります RailsとDjangoのようなもの、
Node.jsの世界でも同じこと。
そして、我々はより多くを費やすよ 水曜日にこの上の時間
そして次のプロジェクトでの。
しかし、私はに行けば サーバ2のディレクトリ、
ここでカップルのパラダイムに気づく。
だから、これは - そこに行く 同等の例であると
それは使っている express.js呼ばれるフレームワーク、
無料のオープンソースである RailsとDjangoのようなソフトウェア、
Laravelのように、それはです ただ、最終的に行く
今日評価されていないすべき '原因私たちが書いてきた
このような簡単な例。
しかし、私たちを信頼しています。
これは非常に迅速になります あなたの友達になる
それが保存されますので、 もしTDSコードがたくさん。
とするための共通のパラダイム express.jsアプリケーションです
app.jsまたはserver.jsを持っている ロジックが含まれているファイル
プログラムのやで 少なくともエントリポイント。
複数のファイルを持つことができます。
ノードモジュールのサブディレクトリ ライブラリーを有する
あなたがダウンロードしたことを 非同期のような
などで自分自身を表現しています。
して、package.json、 package.jsonは、次のようになり、
あなたは手動で作成することができます やツールはあなたのためにそれを作成する
それは文字通り、JSONファイルの
そして興味深い部分 ここに依存関係がある。
ちょうどあなたが、Laravelのように そのベンダーのディレクトリを持っていた
あなたが心配する必要がありました パッケージについてのとやって -
実際に更新する 職人または同様のコマンド、
ライブラリます インストールされている、
同様にpackage.jsonでここに あなたはライブラリを管理
とバージョン あなたが気にすること。
だから、私はpackage.jsonを持っている場合、 私は単純にNPMを行うことができますが、
ノードパッケージマネージャをインストールし、 それは自動的に見えるだろう
そのpackage.jsonファイルで。
見て、参照して、私がやる 最新バージョンを持っている
すべてのベンダーのモジュールの
ノード内のモジュールを強調 ここそれともディレクトリ
一部の親または中 上位ディレクトリ。
でない場合、それはだ それらをダウンロードしようとして
あなたは全体の束が表示されます
行くのHTTPのものの ワイヤーを横断。
だから例えば、私をさせ あなたの内容を表示
ノードモジュールだけで表現する。
私は先に行こうと 大胆ノードモジュールを削除する
私が今持っているすべては、このになるように。
私は、NPMインストールする場合、あなたはよ それは読んで起こっていることがわかります
そのpackage.jsonファイルと 我々は同じような出力を見てきました
Laravelの世界でこれまで。
それは全体のダウンロードをだ 原料の束と、その者
なぜなら順番にエクスプレス がっつり依存
他の人々のライブラリ。
だから、それらのすべてがソートされ 再帰的にダウンロードされている。
今まで、私は再び、LSで行う場合には、
私のノードモジュールがあります バックディレクトリ
そしてバックとして表現しています。
だから、それだけの方法だ パッケージ管理を簡素化する。
今、私たちは見れば app.jsファイル、これが起こっている
への復帰であるために 私たちの初期のWebサーバ
我々だけで唾を吐く場所 の "Hello、World"が不足しています。
しかし、ここでパラダイムに気づく、
まず、急行が必要です このモジュールは、その後、我々は、このラインを持っている
あなたが知っている、コードの 資料から。
あなたは、文字通りその治療 機能として、モジュールの変数、
その開き括弧の近くに カッコはそれを実行を意味します。
それは明らかになるだろう 我々が行っているものを返す
一般的にアプリを呼び出します。
それはどのように動作します？
私は本当にわからない。
私は他の誰かが、あなたが知ってもらおう、 エクスプレスの世界でそれを書く。
私は今立つつもりだ 彼または彼女の肩のように
私のアプリケーションを作る 少し単純で実行されている。
ここで、私が聞くつもりだ その特定のポートで
それは、ほとんどのものかもしれない。
そして、ここのコードです 多分より連想させるようになりまし
Laravelとのroutes.phpの。
だから、これは私は、夕食に簡単です 単にルートを指定する予定
スラッシュのスターなので、すべてのための 吸収されようとしている
このリクエストハンドラによって。
リクエストハンドラのパラダイム その無名関数である
request引数で
とレスポンスオブジェクト 直前のような。
エクスプレス手段にres.send あなたは、コードの後を送信
送信したいどのようなことで。
そしてもちろん、でき 手の込んだ何かをする
実際に送信することにより、 ファイルやHTML
または動的に生成された コンテンツ。
我々はなかったが、今のところ、すべての こんにちは、世界を吐き出すした。
我々は、サーバ3に入る場合は、 これはちょうどでも愛好家である
あなたにいくつかの機能が表示されます。
そして、我々はあなた紹介 でもセクシーバージョン
水曜日のこれの。
しかし、あなたが今まで聞いた場合は、 ソケットIOの多分、
私が思うようにジョナサン または誰かが以前言った、
事の1 ノードは実際に知られている
のためには、リアルタイムで 行動、右？
もしあれば、MySQLでのPHPについて考える チャットサーバを実装した
PHPでそれ2人は可能性 foo.comにブラウザウィンドウを開く
して、それぞれをIMing開始 1ウィンドウの他、アリス、
別のボブとなるよう それらの各々は、彼を見る
または彼女のメッセージに 他のウィンドウ。
あなたはこれをどのように行うだろう PHPとMySQLで？
Laravelの並べ替えを使用するか、使用していない 軽微のため、あなたが持つことができます
index.phpファイルのように。
そして、あなたは持っているん - 中 それは唾を吐くように持っているいくつかのケース
フォームから、そうあります HTMLフォームになるだろう
それはおそらくないで提出 通常のフォーム送信を経由して
しかしアヤックスおそらく、右？
だから、上のように、ハンドラを提出 あなたがテキストフ​​ィールドに入力し、
あなたはエンターキーを押してから、それを取得 Ajaxを介してサーバに送信される。
あなたは何をしてやる サーバー上のですか？
だから、あなたはindex.phpを持っている
だか何かドットPHP HTTPパラメータで受け取った
利用者から、アリスのやボブの インスタントメッセージ、あなたは何をしますか
それとそれを増殖させるために それぞれ、ボブまたはアリスへ？
私は文字通りの意味 とツールを持っている
あなたの分でこれを行うには。
だから、何をしますかのような？
あなたは1分を持っている このプログラムを実施する。
うん？
[聞こえない備考]
完璧。右なので、 データベースを持っている。
我々は少し知っている MySQLについて少し。
だから、あなたはテーブルを持っている つまり、メッセージだ、
多分時間があります スタンプ、ユーザID、
メッセージの本文 自身がそれを作成し、
そのそのすべてを更新した。
だから、あなたは、データベースに格納します。
とアリスが送信したとし 最初のメッセージは、どのようにボブが得るん
今、そのメッセージ データベースから？
>>これは、いくつかのAjaxかもしれません 絶えず起こっているの応答
データベースに戻す TOP [聞こえない]を得る。
>>その通り。
だから、コードのボブのコードです アリスと同じだけの一種である
対称関係に、
ボブのブラウザは、いくつかのAjaxコードを持っている それはおそらく、多分、すべての30代
引っ張っ秒 Ajaxの同期を介して、サーバ、
新しいメッセージはありますか？
30秒ごとに起こっている 種の次善であると
彼も待つ必要があるため、
もしアリス文字通り ただ、メッセージを送った。
だから、ボブのブラウザができた すべての2番目のサーバーをヒット。
しかし、それはアリスのことを意味する ブラウザがサーバーに当たっている
毎秒。
チャーリーはどう [スペルを想定]
ダビデは、[スペルを想定] とエドワードは、[スペルを想定]
そして他のすべての手紙 アルファベットの？
何が問題なの このアプローチの？
過度のヒットの土地 -
私はあなただけを効果的にしているわけで あなた自身の視力を、投与
またはDDOSing、分散 サービス拒否攻撃
あなた自身のサイト上で、すべてを有することにより、
これらのユーザーのJavaScriptを実行 ただpingするのは、コード
ご使用のサーバのうち、一体 でも、任意の数であれば、
時間の80％ 誰も何も言わなかった
チャットルームで。
しかし、あなたはちょうどチェックしている このようなのを確認します。
たくさんの中のSO PHP 言語は単に良いものではありません
リアルタイム通信のための。
PHPのリコールにありますので、 中心的記憶ないですよね？
あなたは、セッションオブジェクトを持っている どのような錯覚を作成します
中央ストレージのが、 つまり、ユーザー単位でのです。
あなたは、グローバルメモリを持っていない あなたはJavaサーブレットで行うように
おなじみの、または他の内 フレームは、そのように動作します。
Node.jsのしかし、あなたはありますか あなたが持っている原因は、グローバルメモリ」
1サーバーと「できることを それが望んでいる何も覚えて
約すべてのユーザー。
そして、あなたはまだかもしれない データベースがある。
しかし、Node.jsのいいところ あまりにもそれがずっといいということです
PHPのようなものよりも と錯覚を作成する
複数の取り扱い 一度物事。
実際に脇では、することができますように PHPでチャットサーバーを実装し、
しかし、あなたは一般的に行うだろう ロングポーリングと呼ばれるもの
あなたはpingを実行しないことにより、 サーバー毎秒。
あなたには、サーバーをping、 サーバがあなたに応答しない
30の上向きのため 秒、それは文字通り座っ
ループ内で待機し、待機している。
とサーバをチェックした場合 データベースの新しいデータがあります
そしてそれだけ、一度あなたが "ああ、見て、 ここにボブからのメッセージ」には、だ
それはHTPサーバに返信するのですか？
だからあなたのブラウザに影響 あるIEのアイコンまたはMozilla
または何でも、単に回転を維持し 一度に30秒間。
しかし、逆はそうでない、ある 30接続要求を持っている
30秒では、1つを持っている。
だから、それは、ロングポーリングと呼ばれています。
しかし、より良い最新のWebでの ブラウザでは、と呼ばれるものです。
WebSocketの、どの あなたは、CS143を取る
あなたが効果的に行うことができます クライアントからのTCPコネクション
サーバへのブラウザのよう し、それにハングアップ
ほとんどを使用せずに できるだけ多くのリソース
HTTPのように、伝統的に行う可能性があります。
およびソケットIOはある Node.jsのライブラリ
それはそれははるかに容易になります ソケット接続を確立し
そこか幻想 古いブラウザのために
あなたはこれを実装することができるように リアルタイム機能の。
だから、ここでの例である。
トップまでこのようなものを取得 もう少し複雑
それは主にコピー＆ペーストだ socket.ioのマニュアルから。
ここでは今よります 正確なリクエストハンドラ。
ユーザ要求aの場合 スラッシュ、私はどのようなファイルをつもりです
明らかにされるように それまでのサーブ？
index.htmlを。
そして、いくつかの新機能があります ここのものの流れ
私はあなたを紹介している 後すぐに。
しかし、これはちょうど別の方法です
ファイルAをつかんでの もう少し効率的に
ただfs.readFileを行うよりも。
それは少し賢くだ 特に大きなファイルの場合。
長い間話を短く、 これらの行は、単に提供するために
index.htmlを呼ばれるファイルをバックアップします
今のところ含まれているとしている HTMLフォームによるアリス
そしてボブは相互通信性があります。
最後に、io.sockets.onので、この ここまでこの行から来ている。
だから、私は読んでいる ドキュメントio.socketは私に与え
いわゆるへのアクセス WebSocketのブラウザで、
ブラウザ間 およびサーバー。
私は特別なために聞いている イベント接続した手段
ときに、ユーザーが最初に ヒットしようとしてサーバー
この接続を開くために、私は今 バックこのコールを呼ぶことに。
そして今、私は行くよ 以下を実行する。
5秒ごとに、 私は何をするつもりだ？
私は、放出または放送するつもりです スクラッチを覚えていれば、
グラフィカル言語だろう ブロードキャストをブロックすること？
だから、あなたは発光するようになるだろう
またはと呼ばれるイベントをトリガ 任意のサーバーから。
そして、それはなるだろう メッセージのPingが含まれている
現在の日付。
だから、これは実際ある チャットサーバーそのアリス
そしてボブは使用することができますが、それは一種の 自動化されたチャットサーバの
メッセージはどこ ソナーのpingのちょうど一種。
それだけです常に最新だ 5秒ごとに送信される。
だから、私は実際にこれを実行した場合 事 - そしてそれはあります。
ダウンここに明確にする、予告 これはちょうどここにダウンして記録している。
だから、私は考えてみよう それに見て見ぬふり。
私はapp.js.のノードをやってみましょう
私は私のブラウザに行こう。
ここにホームページを再ロードします。
[一時停止]
そして私は、インスペクタを閉じてみましょう。
5秒ごとに、私は持っている デモさえないが
人間のためのインタラクティブな
の何かの 非同期で起こって。
ブラウザー通知に、 何回転アイコンはありません。
それは手の込んだ機能を使っている 最新のブラウザでのクロムの
ソケットを維持する ボンネットの下に接続
そしてそれはと呼ばれるものです 一般的にはパブリッシュ/サブスクライブモデルでは、
パブリッシュ/サブスクライブモデル、 我々は行っていない場合、
それはかなりここで明示的に。
しかし、何がこれについてうれしいです 一般的なパブリッシュ/サブスクライブのパラダイムである
あなたは1出版社を持つことができること。
この場合 中央サーバーとすべての
個々の ブラウザは、クライアントである。
のアリシズ小物類 世界はそれを購読することができ、
だから、メッセージを中継することができます ユーザーは、任意の数の中で。
そして再び、我々はしているにもかかわらず、 双方向性を見ていない、
私たちは、多分12のラインを持っていた コー​​ドだけこれを行うには。
そして、それはおそらく、LEAPではありません あなたがむちする方法を想像する
index.htmlファイル出 それは、真のHTMLフォームを持っている、
とjQueryのコードを少し 昼間は送信されませんアヤックス
ちょうど送り、どのようなアリス サーバーまたはボブタイプ
して、サーバー それを中継します。
そして、私は垣間見ることを約束 1最後の事でちょうど
これであなたをいじめる。
私たちは、ストリームに行けば 0と1、
あなただけのコードが表示されます ここで少し異なる。
ちょうどので、あなたはそれを見てきました、 これは代替手段です
私はfs.readFileと呼ばれるものに 以前の方法で、これにより、
あなたが行く」、Node.jsのを伝えることができます メモリーには、このファイルをお読みください。
しかし、それは大きいです場合だけ与える 当時の私の塊。 "
そして、あなたはCS165から知っているかもしれない
又は161のファイルシステム 別の持っている
性能特性。
あなたが読みたいかもしれません 512バイトのブロック単位で
または2キロバイトまたは何でも。
これは、最適化の方法です 反復して戻ってファイルの取得
あなたはそれを吐き出すことができるように うちもう少し迅速
ブラウザに、またはへ 誰エンドクライアントです。
コンテンツのそのように膨大な量 今日、私たちはダイビングをするつもりだ
水曜日の詳細へ ティムと[想定スペル]
特に、どのように我々を見ている いくつかのアイデアを翻訳することができます
の前半から もちろんLaravelとモデル
彼自身ライブラリに Bookshelf.js呼ば書いた
ますますなっている コミュニティで人気
それはあなたにそれのほとんどを与えるので、
そうでない場合よりも多くの 説得力の機能
これリコールということです Laravelのライブラリーの洞察、
どのようにより多くの
本格的に開発する 水曜日のアプリ。
私たちは、その後表示されます。