ぽちログ

プログラミング歴3年目元文系大学院生のぽちと申します。 とりあえずは自分用のメモなどを残して行くつもりですが、ご要望・意見・感想などを頂けたらそれによって内容も変化していくと思います。 よろしくお願いします。

Node.js + Express4 + Socket.io + SocketIO4Netで詰まったのでメモ

久々の投稿です。

最近は実装に論文に実験にとあたふたしてましたが、
昨日論文投稿したので少し余裕でました。

f:id:twilightdve:20140925114723p:plain

こんな感じの実験システムを作っていたわけですが。

①socket.ioのバージョンで詰んだ

Socket.IOがver0.9からver1.0になり、
SocketIO4Net(C#用のSocket.ioのクライアントライブラリ)の更新が

"This project will no longer be maintained."
(SocketIO4Net.Client - Home)

socket.io 0.9の時に終わってしまったため通信できなくなった様です。

なのでNode.jsのプロジェクトを作る時に、以下のコマンド"@"を使ったバージョン指定でのインストールを行わなければならない。

npm install socket.io@0.9

②Express4の使い方で詰んだ
以前までExpress3を使っていた(この頃はまだよくわからず使ってたが)ので、4にバージョンアップしてわからなくなった。

express4でexpress-generatorを使ってプロジェクトを作成すると以下の様なディレクトリになる。

MyExpressServer(プロジェクト名)
-bin
--www
-node_modules
--body-parser
--cookie-parser
--debug
--ejs
--express
--morgan
--serve-favicon
--socket.io
-public
--images
--javascripts
--stylesheets
-routes
--index.js
--users.js
-views
--index.ejs
--error.ejs
-package.json
-app.js

これのやり方はこれの
Express - Moving to version 4

これ

$ npm install -g express
$ npm install -g express-generator

$ express -e MyExpressServer
$ cd MyExpressServer && npm install
$ npm install socket.io@0.9 //C#との連携じゃない場合は@0.9はいらない


詰まった所は、以前まではapp.jsの中に以下のコード(サーバを構築する処理)を書いていた。

//ポート設定
app.set('port', process.env.PORT || 3258);

var server = http.Server(app);
//appにsetしたport番号とhostのip adress, error時に呼び出される関数
server.listen(app.get('port'), "localhost", function (err) {
	if (err) throw err;
	console.log('Listening on ' + server.address().address + ':' + server.address().port);
});

これはexpress4ではbin/wwwに記述する事になった様です。

app.jsでレンダリングするページのディレクトリやらなんやら設定して、wwwでそれを

var app = require('../app');

で読み込みます。

サーバを起動する際には、package.jsonの中にscriptが書かれいる"start"コマンドを使います。
つまり

npm start // node ./bin/wwwが実行される

と入力すればサーバが起動する。


③ejsのレンダリングでハマった

publicの中にあるjavascriptsやstylesheetsフォルダ、これを最初は以下の様にしていたんだけど。

public
-main.js
-class
--myClass.js // 仮名
--etc...
-lib
--three.min.js
--etc...

指定したページ(http://localhost:3000/)を開いても、
読み込んでくれるファイルと読み込まないファイルがある。

試しにjavascriptsとstylesheetsフォルダにディレクトリの階層構造を作らずファイルを入れたら正確に読み込んだ。

これに関しては原因がイマイチわかっていない。

今後暇があれば原因探してみる。

では以上。