Skip to content

勝手ながら添削 #1

Description

@yosuke-furukawa

これだけのサンプル作成は本当に素晴らしいですね。

ただ、いくつか勘違いされている所もありそうなのと、サンプルとしてどうなのかなと思ったところがあったので、コメントだけ残しておきます。

■1. IPが192.168.1.202に固定はどうなんでしょう。ローカルでは動かない時も多いとおもいますし、ローカルで動作させようと思ったらlocalhostに書き換えるか127.0.0.1とかを指定しなくてはいけなくて初心者は困惑するのでは。IPを固定する意味はないのであればlocalhostにしておいたほうが無難な気がします。

■2. sysモジュールは古いのでutilモジュール使いましょう。
昔のサンプルから取ってきたのか、sysを使っている所があって、古い気がしました。utilを使いましょう。

■3. listenの後、Serverが起動したことを表すログを毎回console.logを書いてるんですが、listenの成功失敗に関わらず出るし、listenのタイミングじゃないので微妙です。

listenはコールバックを受け付けるのでそこで出す方が一般的ですね。

var http = require("http");
http.createServer(function (req, res) {
    res.writeHead(200, {"Content-Type": "text/plain"});
    res.end("hello, world!\n");
}).listen(1337, "192.168.1.202", function() {
  console.log("Server running at http://192.168.1.202:1337/");
});

■4. 043_socket_ioでクライアント(自分を含めた全て)にイベント送信
知っているかもしれませんが、socket.broadcast.emitして、socket.emitしてますが、io.sockets.emitの一回でできるのでサンプルとしてはそれでやった方がいいですね。
自分のsocketの場合にだけ処理を変えたい時は分けておいていいんですが。043は特に変えているわけでは無さそうなので。他にも044とかでも同じことしてますがこういう場合はio.sockets.emitの方がいいです。

あとcliant.html(client.htmlのtypoっぽい?)の中のscriptタグ内でfuncメソッドをクライアントで実行してますが関数が引数に渡されていないので、エラーになります。

■5. あと、ブログのタイトルにwebsocket編、と書いているんですが、socket.io = websocketだと勘違いされているケースが多いので、どちらかというとsocket.io編にするか、別にsocket.ioに限ってない気がするのでnode.js TIPSにしては如何でしょう。
まぁ細かい話なのですが、本当にこの勘違い多いんです。

6以降はさらに微妙な話ですが。。

■6. requestからのデータをdataとendのイベントで受ける、Stream1で記述されているので、少し古いですね、これからはreadableとendで受けるStream2っぽく記述しておくと今風かもしれません。ただ、コレに関してはnode v0.10以上でしか使えないので古いnodeも対象とするのであれば要らないと思います。

■7. cliant.htmlにsocket.io.jsのURLが記述されているんですが、IPがhtml内にベタ書きで残念ですね。せっかくIPを外部ファイル化しているのに。 src = "/socket.io/socket.io.js" としておけばIPは不要かと思いますが、明示したいのであればfs.readFileのコールバックでdataの中身を差し替える方法が良いかもしれませんね。

こんな感じ?

// 外部のHTMLデータを読み込み
    fs.readFile(
        "./043_cliant.html",
        function (err, data) {
                        if (err) { throw err; }
       data = "" + data;
      data = data.replace('</body>', '<script type="text/javascript" src="http://' + setting.IP + ':' + setting.PORT+ '/socket.io/socket.io.js"></script></body>');
            // HTTPレスポンスヘッダを作成・送信(200:OK,500:ServerError,404:NotFound)
            res.writeHead(200, {"Content-Type": "text/html; charset=UTF-8"});
            res.write(data);
            res.end();

        }
    );

ひとまずこんな所でしょうか、全部見たわけじゃないので他にもあるかもしれませんが、

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions