ホームページ  >  記事  >  バックエンド開発  >  httpサーバーを実装するためのjsのコールバック関数

httpサーバーを実装するためのjsのコールバック関数

不言
不言オリジナル
2018-07-25 10:30:211855ブラウズ

今回の記事はコールバック関数を使ったhttpサーバーをjsで実装するという内容で、非常に詳しい内容となっております。次に具体的な内容を見ていきますので、皆様のお役に立てれば幸いです。

ネットワーク操作

まず http モジュールを使用して http サーバーを実装します

var http = require('http');    // 使用http模块

http.createServer (
        function (request, response) {
            response.writeHead(200, {'Content-Type': 'text-plain'});    // http响应头部
            response.end('hello word\n');    // 返回的内容
        }
    ).listen(8124);    // 监听8124端口
rrree

http://127.0 にアクセスします。 0.1: 8124/ hello word を返します

いくつかの API

http モジュール

2 つの方法、

  1. サーバーとして使用する場合は、http サーバーを作成し、http クライアント要求をリッスンして応答を返します。

  2. #クライアントとして使用する場合、http クライアント リクエストを開始してサーバーからの応答を取得します。

サーバーはイベント駆動型です。はい、サーバー作成時のコールバック関数は 1 回呼び出されます。つまり、これはイベント駆動型です。

http リクエスト ヘッダー

http リクエストの本質は、リクエスト ヘッダーで構成されるデータ ストリームです。そしてリクエストボディ。

ブラウザの開発者ツールを開き、ネットワーク パネルを選択し、ページを更新してファイルを再度選択し、ヘッダー ウィンドウに現在のファイル リクエストの http ヘッダー情報を表示します。

最初にリクエスト ヘッダー、その後にリクエスト本文が続きます。
http リクエストがサーバーに送信されると、最初から最後まで 1 バイトのデータ ストリームで送信されます。http モジュールによって作成された http サーバーは、完全なリクエストを受信した後にコールバック関数を実行します。 header,

PS C:\Users\mingm\Desktop\test> node main.js
var http = require('http');    // 使用http模块

http.createServer (
        function (request, response) {
            var body = [];

            console.log(request.method);
            console.log("--------------");
            console.log(request.headers);
            console.log("---------------");
        }
    ).listen(8124);    // 监听8124端口
コールバック関数

PS C:\Users\mingm\Desktop\test> node main.js
GET
--------------
{ host: '127.0.0.1:8124',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'upgrade-insecure-requests': '1',
  dnt: '1',
  'user-agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
  accept:
   'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }
---------------
var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    console.log("3333");
    console.log(err);
    console.log(data.toString());
    console.log("3333");
});

console.log("程序执行结束!");

I/O 操作が発生した場合は、最初に実行をスキップし、現在のコンテンツを実行します。結果はこれで、完了した実行結果がパラメータ リストの最後の関数に渡されるため、最後の関数は callback

http のコールバック関数となり、

PS C:\Users\mingm\Desktop\test> node main.js
程序执行结束!
3333
null
33333333333333333333333333
3333
PS C:\Users\mingm\Desktop\test>

execution を要求します。 result

var http = require('http');

http.createServer(
    function (request, response) {
        var body = [];

        console.log(request.method);
        console.log(request.headers);

    console.log(1111111111);
    console.log(body);

       request.on('end', function () {
        body = Buffer.concat(body);
        console.log(222222222222222);
        console.log(body.toString());
    });

    console.log(4444444444444);
    response.writeHead(200, {'Content-Type': 'text-plain'});
    response.end('hello word\n');
    console.log(55555555555);
    }
).listen(8124);
この実行は非同期です。最初に実行されます

PS C:\Users\mingm\Desktop\test> node main.js
GET
{ host: '127.0.0.1:8124',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'upgrade-insecure-requests': '1',
  'user-agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
  dnt: '1',
  accept:
   'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }
1111111111
[]
4444444444444
55555555555
222222222222222

GET
{ host: '127.0.0.1:8124',
  connection: 'keep-alive',
  pragma: 'no-cache',
  'cache-control': 'no-cache',
  'user-agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
  dnt: '1',
  accept: 'image/webp,image/apng,image/*,*/*;q=0.8',
  referer: 'http://127.0.0.1:8124/',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }
1111111111
[]
4444444444444
55555555555
222222222222222
request.on は戻りを待つ必要があるため、次のステートメントは非同期で実行されます。その後、内容が返されてリクエストが実行され、その結果を関数の最後のパラメータに通知して実行を完了します。

http レスポンス

サーバーはクライアントから要求されたリクエストボディをそのままクライアントに返します

console.log(body);
errree

ちょっと書き方が汚いです

http client

node が http クライアント リクエストを送信します

console.log(444);

上記は http リクエストを送信します。

関連する推奨事項:

axios ソース コード分析 HTTP リクエスト ライブラリの実装方法

以上がhttpサーバーを実装するためのjsのコールバック関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。