質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

2回答

7090閲覧

node.jsでrequire('http');する理由

hisatoshi_y

総合スコア37

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

1グッド

1クリップ

投稿2015/04/21 15:16

こんにちは、expressの4系で色々いじっているものです。

httpをrequireする必要があるのはどういった場合なのかを知りたくて質問させていただきました。

具体的には、以下の様なプログラムでサーバーを立てることができますよね。

var express = require('express');
var app = express();

app.get('/', function(req,res){
res.send('server running');
});

app.listen(3000);

この状態をベースにgetリクエストとかpostリクエストとかを分けていけばいいはずです。十分にサーバーの役割を果たしていると思うのですが、sokect.ioのドキュメント(http://socket.io/docs/)等を読むと、httpをrequireするようなサンプルコードが出てきます。
また、公式のドキュメントには必要とさえ書かれています。(http://nodejs.jp/nodejs.org_ja/api/http.html#http_http)

これはどういうことなのでしょうか?
そもそも上記のコードでサーバーは立てれていないのでしょうか?

プログラミング界隈のおまじないという言葉が大嫌いなので、難解なことでも構いません。詳細を教えていただけたらと思います。よろしくお願いします。

9nahito👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

expressのみを使う場合であれば

app.listen(3000);

でサーバをたてることはできますし、明示的にrequire('http')する必要はないと思います(app.listen()はhttp.Server.listen()を呼んでるのと等価ですとドキュメントにもあります)

該当部分のソースコード

最後のほう、593行目あたりから見てください

socket.ioにhttpが必要な理由ですがsocket.ioはWebSocketを処理するために「宿主」のようなフロントエンドとなるWebサーバを必要とします
ただこの「宿主」にはGETやPOSTの処理は必要ないので別にexpressのような大きめなフレームワークではなくミニマムなHTTPサーバ(http.Server)で十分なのです(expressに依存するようになると芋蔓式に必須モジュールも多くなりますし)

var app = require('express')();
var server = require('http').Server(app);

ですが、同じhttp.Serverのインスタンスにsocket.ioもexpressも同居させて、socket.ioとexpressを同じポートで待ちうけしたい場合によく使います
↑のようにするとWebSocketの処理はsocket.ioがやりますし、GETやPOSTなどの一般的なHTTPの処理はexpressがやってくれるようになります

投稿2015/04/22 09:01

khirose

総合スコア251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hisatoshi_y

2015/04/23 03:36

なるほど!! よくわかりました。 ソケットIO単体にサーバーを立てる必要があるのですね。 そして、殆どの場合、そのサーバーはexpressと同居させるという。 ありがとうございました。
guest

0

expressを使う際にもrequire('http')を明示的に書くことが必要とはどこにも書いてないと思いますが。
コードを読んだわけではないですが、expressの内部でrequire('http')しているのでは?
(そうでなければ、それと同等の処理を含んでいる)

投稿2015/04/21 16:33

otn

総合スコア84491

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hisatoshi_y

2015/04/22 01:50

失礼しました。httpのドキュメント部分に、httpサーバーを立てるときに必要という記述があるのです。 内部的に呼んでいるのなら、引数にexpresのインスタンス(概念が違うかもだけど)を渡しているのも疑問です。 var app = require('express')(); var server = require('http').Server(app);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問