はじめに
先に言うと「.Server()」と「.createServer()」で処理された結果に違いがありません。
説明
(1) createServer()の処理
httpモジュールのcreateServer()の実装(一部抜粋)は以下のようになっています。
Serverのインスタンスを生成する処理です。
github.comのnode/lib/http.js
javascript
1// node/lib/http.js
2exports.createServer = function(requestListener) {
3 return new Server(requestListener);
4};
このコンストラクタ関数Serverは、_http_serverモジュールでexportされているServerです。
httpモジュールでは、このコンストラクタ関数をServerとしてexportしています。
このため、require('http').Serverは、require('_http_server').Serverの呼び出しになります。
javascript
1// node/lib/http.js
2const server = require('_http_server');
3...
4const Server = exports.Server = server.Server;
(2) Server()の処理
_http_serverモジュールのServer()の実装(一部抜粋)は以下のようになっています。
github.comのnode/lib/_http_server.js
javascript
1// node/lib/_http_server.js
2function Server(requestListener) {
3 if (!(this instanceof Server)) return new Server(requestListener);
4...
5}
通常のコンストラクタ関数ですが、一行目のifの処理として、newを伴わず直接呼び出された場合でも、
必ずインスタンスの生成となるようになっています。
まとめ
httpモジュールでServerインスタンスを生成する場合、(a)〜(c)の記述ができます。
javascript
1var app = require('express')();
2
3// (a)
4var server = require('http').Server(app);
5// (b)
6var server = require('http').createServer(app);
7// (c)
8var server = new require('http').Server(app);
たぶん、socket.ioのサイトにあるコードの例からの質問だと思います。
コード例で複数の書き方をされると混乱しますよね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/12 02:36