2014年1月11日土曜日

node.jsの勉強、謎の動作?

最近あまり話題になってないけど、一時期やたらnode.jsが騒がれていたと思います。特徴として、

  • イベントドリブンなので大量のrequestを受信しても問題が起きない。(単に停止するという、最悪な状態は発生しないよ、というサービスサイドの要求)
  • JavaScriptが基本で、生産性が高い(本当か?)
  • 一方、まだバージョンが0.Xの状態で安定性に欠ける(メモリリークもひどい。これは最初の利点とちょっと矛盾しますが)
とりあえず触ってもみずにあれこれいうのも何なので、少しやってみました。で、動いたことは動いたんですが、ちょっと謎の動きがあり、原因がまだつかめてません。

【現象】
server.on('request', function(req, res) { }

クライアントであるブラウザからの要求(request)のイベントに反応して行う処理を記述する部分ですが、chromeと、IE/FireFoxで動きが異なる。
問題はchromeの方。ページ更新を1回しかしていないのに、2回処理が動いてしまう。
しかもWireSharkで通信内容を調べてみると、node.jsから返信している2回目の内容を画面に反映していない。(従って、連続してページ更新を行うと、1回ごとに2回分の処理が行われるように見える)
但し、送信ボタンを押して処理を行う、というイベント処理では特に2回動くということはなく、chrome/IE/FireFoxとも同じ動きをしています。

WireSharkのログを比較しても、若干違いがあるのはわかるんですが、node.jsがパケットの何をトリガに、このイベントを発生しているのかまだよくわかってないためもう少し時間がかかりそうです.。

少しnode.jsを調べていたら、それらしいhintがみつかりました。そういえばchromeはURL表示欄にFaviconを表示しています。それらはページ更新の際、個別のrequestとしてServerには認識されるそうです。Server処理の方できちんと区別して、試してみて確認しないと。

0 件のコメント:

コメントを投稿