名前(敬称略) | 解答URL | 課題1 | 課題2 server.closeの場所 | 課題2 ソケットの切断方法 |
---|---|---|---|---|
外村 | https://gist.github.com/4129163 | ○ server.close()が二度呼ばれてエラーになるというのはnet.jsのコードを見ると確認できる(this._handleにnullが設定されるため) | serverのconnectionイベント | reqのendイベントで req.connection.end() |
古川 | https://gist.github.com/4134211#comments | ○ console.logで2度 server.close が呼ばれていることを確認 | serverのconnectionイベント | serverのrequestイベントでreq.connection.destroy() |
Toshiya SAITO | https://gist.github.com/4135125 | ○ | connectionイベント | HTTPのレスポンスヘッダにConnection: closeを追加するか, レスポンスを返した後にHTTPリクエストのソケットを閉じる. |
岩本 | https://gist.github.com/4135345 | カンニング? ○ | connectionイベント | reqのendイベントで req.connection.end() |
野田 | https://gist.github.com/4133802 | ○(だだし「server.close()するよりも先に2つ目のrequestに対するhttp requestイベントの発火の方が早いがため」の記載が微妙) | connectionイベント | requestイベントで req.socket.end() |
松尾 | https://gist.github.com/4129036 | ○ GJ! telnetでHTTP/1.0,1.1の違いを確認 | connectionイベント | レスポンスヘッダーに Connection: close を記入 |
土田 | https://gist.github.com/4139254 | ○ console.logで2度 server.closeが呼ばれていることを確認 | connectionイベント | requestイベントでreq.connection.end() |
村山 | https://gist.github.com/4189468 | ▲ 「ところが、1回目のコールバックですでにserver.close()が実行されているため、次のリクエストで実行されるreq.end()(の中で実行されるsocket.write())においてエラーが生じる。」 | connectionイベント | requestイベントでconnectionイベント |
浜辺 | https://gist.github.com/4131753 | ○ | connectionイベント | req の endイベントでreq.connection.destroy()を once 、 もしくはres.shouldKeepAlive = falseでKeep-Alive自体を無効にする。 |
-
-
Save kysnm/4193217 to your computer and use it in GitHub Desktop.
第1回Node.js入門勉強会 レポート課題
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var http = require('http'); | |
server = http.createServer(function (req, res) { | |
res.writeHead(200, {'Content-Type': 'text/plain'}); | |
res.end('Hello World\n'); | |
server.close(); | |
}); | |
server.listen(8080, 0, function () { | |
console.log('Server running at http://localhost:8080/'); | |
}); |
第1回の勉強会で重要だった点の一つは server.close() の挙動でした。 今回は、この server.close() の挙動についての課題です。
A君は、ブラウザで1回閲覧したら HelloWorld のWebサーバが終了するプログラムを作ろうと hello.js を作りました。 だけど Chrome でアクセスすると下のようなエラーになってしまい、プログラムが正常に終了しません。
なぜエラーが発生したのかその理由を記述しなさい。
このプログラムを修正してエラーが発生せずA君がやりたかったプログラムを作りなさい。
gist か ブログかに記載して、URLをメーリングリストに連絡してください。
##提出期限
次回勉強会開催まで。(その前に出そろえば答え合わせでもしましょうか)
> node hello.js
Server running at http://localhost:8080/
net.js:1046
throw new Error('Not running');
^
Error: Not running
at Server.close (net.js:1046:11)
at Server.<anonymous> (/home/ohtsu/hello.js:5:10)
at Server.EventEmitter.emit (events.js:99:17)
at HTTPParser.parser.onIncoming (http.js:1807:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
at Socket.socket.ondata (http.js:1704:22)
at TCP.onread (net.js:403:27)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
課題1
/favicon.ico へのアクセスが発生し、server.close() が二回呼び出される為
課題2
すいません、ちょっとカンニング気味かもです。。。