Heim  >  Artikel  >  Backend-Entwicklung  >  Rückruffunktion in js zur Implementierung eines http-Servers

Rückruffunktion in js zur Implementierung eines http-Servers

不言
不言Original
2018-07-25 10:30:211793Durchsuche

Der Inhalt, der in diesem Artikel mit Ihnen geteilt wird, befasst sich mit der Callback-Funktion in js, um einen HTTP-Server zu implementieren. Als nächstes werfen wir einen Blick auf den spezifischen Inhalt.

Netzwerkbetrieb

Verwenden Sie zunächst das http-Modul, um einen http-Server zu implementieren

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

Zugriff auf http://127.0. 0.1: 8124/ Hallo Wort zurückgeben

Einige API

http-Modul

Zwei Möglichkeiten,

  1. Bei Verwendung als Server erstellen Sie einen HTTP-Server, hören HTTP-Client-Anfragen ab und geben Antworten zurück.

  2. Bei Verwendung als Client eine HTTP-Client-Anfrage initiieren, um eine Antwort vom Server zu erhalten

Die Serverseite ist ereignisgesteuert Ja, Die Rückruffunktion wird beim Erstellen des Servers einmal aufgerufen, d Anfragetext.

Öffnen Sie die Entwicklertools des Browsers, wählen Sie das Netzwerkfenster aus, aktualisieren Sie dann die Seite, wählen Sie erneut eine Datei aus und im Header-Fenster werden die http-Header-Informationen der aktuellen Dateianforderung angezeigt


Zuerst die Anfrage header , gefolgt vom Anforderungstext
Wenn eine http-Anfrage an den Server gesendet wird, wird sie in einem Datenstrom von Anfang bis Ende gesendet. Nach dem Empfang des vollständigen Anforderungsheaders führt der http-Server die Ausführung aus eine Rückruffunktion,

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端口

Rückruffunktion
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("程序执行结束!");

Wenn Sie auf einen E/A-Vorgang stoßen, überspringen Sie zuerst die Ausführung und führen Sie den aktuellen Inhalt aus. Das Ergebnis ist also dieses, und dann wird das Ausführungsergebnis an die letzte Funktion in der Parameterliste übergeben, sodass die letzte Funktion die Callback-

http-Callback-Funktion ist, die

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

Ausführungsergebnis

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);
Diese Ausführung erfolgt zuerst bis

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

Da request.on auf die Rückgabe warten muss, wird die folgende Anweisung

console.log(body);
asynchron ausgeführt Anschließend wird der Inhalt zurückgegeben, die Anforderung ausgeführt, das Ergebnis an den letzten Parameter der Funktion zurückgegeben und die Ausführung abgeschlossen.

http-Antwort

Der Server gibt den vom Client angeforderten Anforderungstext so wie er ist an den Client zurück

console.log(444);
PS C:\Users\mingm\Desktop\test> node main.js
444444444444
22222222
33333333
555555
Das Schreiben ist etwas chaotisch

http Client

Knoten sendet eine http-Client-Anfrage

var http = require("http");

http.createServer(function (request, response){
    console.log(444444444444);
    response.writeHead(200, { 'Content-Type': 'text/plain' });

                    // 为响应头,即原路发送给客户端
                    request.on(
                        "data", 
                        function (chunk) {
                            response.write(chunk);
                            console.log(111111);
                    });

                    console.log(22222222);
                    request.on('end', function() {response.end();console.log(555555)});
                    console.log(33333333);
                }
).listen(8124);
Das Obige sendet eine http-Anfrage.

Verwandte Empfehlungen:

Axios-Quellcode-Analyse zur Implementierung einer HTTP-Anforderungsbibliothek

Das obige ist der detaillierte Inhalt vonRückruffunktion in js zur Implementierung eines http-Servers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn