node.jsはノンブロッキング処理
// nodeが用意しているhttpモジュール
var http = require('http');
var server = http.createServer();
// server.onでイベント待ち受け
// 引数はリクエストとレスポンスのオブジェクト
server.on('request', function(req, res){
// httpのステータスコード200
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('hello world');
res.end();
});
// サーバを待ち受け状態する
server.listen(1337);
console.log("server listening...");
httpモジュールを読み込んで、リクエストに対してレスポンスを記述している。listenはサーバのポート。
さて、この具体的に”http module”って何? 公式ドキュメントを見ます。
HTTP | Node.js
https://nodejs.org/api/http.html#http_http
– Class: http.Agent
— new Agent([options]), agent.createConnection(options[, callback]), agent.keepSocketAlive(socket), agent.reuseSocket(socket, request), agent.destroy(), agent.freeSockets, agent.getName(options), agent.maxFreeSockets, agent.maxSockets, agent.requests, agent.sockets
– Class: http.ClientRequest
— Event: ‘abort’, Event: ‘connect’, Event: ‘continue’, Event: ‘information’, Event: ‘response’, Event: ‘socket’, Event: ‘timeout’, Event: ‘upgrade’, request.abort(), request.aborted, request.end([data[, encoding]][, callback]), request.flushHeaders(), request.getHeader(name), request.maxHeadersCount, request.path, request.removeHeader(name), request.reusedSocket, request.setHeader(name, value), request.setNoDelay([noDelay]), request.setSocketKeepAlive([enable][, initialDelay]), request.setTimeout(timeout[, callback]), request.socket, request.writableEnded, request.writableFinished, request.write(chunk[, encoding][, callback])
– Class: http.Server
— Event: ‘checkContinue’, Event: ‘checkExpectation’, Event: ‘clientError’, Event: ‘close’, Event: ‘connect’, Event: ‘connection’, Event: ‘request’, Event: ‘upgrade’, server.close([callback]), server.headersTimeout, server.listen(), server.listening, server.maxHeadersCount, server.setTimeout([msecs][, callback]), server.timeout, server.keepAliveTimeout
– Class: http.ServerResponse
— Event: ‘close’, Event: ‘finish’, response.addTrailers(headers), response.cork(), response.end([data[, encoding]][, callback]), response.flushHeaders(), response.getHeader(name), response.getHeaderNames(), response.getHeaders(), response.hasHeader(name), response.headersSent, response.removeHeader(name), response.sendDate, response.setHeader(name, value), response.setTimeout(msecs[, callback]), response.socket, response.statusCode, response.statusMessage, response.uncork(), response.writableEnded, response.writableFinished, response.write(chunk[, encoding][, callback]), response.writeContinue(), response.writeHead(statusCode[, statusMessage][, headers]), response.writeProcessing()
– Class: http.IncomingMessage
— Event: ‘aborted’, Event: ‘close’, message.aborted, message.complete, message.destroy([error]), message.headers, message.httpVersion, message.method, message.rawHeaders, message.rawTrailers, message.setTimeout(msecs[, callback]), message.socket, message.statusCode, message.statusMessage, message.trailers, message.url
– http.METHODS
– http.STATUS_CODES
– http.createServer([options][, requestListener])
– http.get(options[, callback])
– http.get(url[, options][, callback])
– http.globalAgent
– http.maxHeaderSize
– http.request(options[, callback])
– http.request(url[, options][, callback])
主に(1)agent, (2)client request, (3)server, (4)server response, (5)incoming responseを提供しています。
apacheのgit hubを見ます。 https://github.com/apache/httpd
apacheのモジュールと比べると大分シンプルなように見えるが、それにしても、量的にボリュームがあるな。
あれ、待てよ、各言語やフレームワークでビルトインサーバーの機能があるけど、あれって、nodeのhttpモジュールのように、requestやresponseを各言語でserver機能として書いているってこと??
こりゃ参ったね。。 何をやっても、結局、C言語やらないと駄目って結論になるな。