node.jsのv0.7以降でsocket.ioのv0.9.5を動かす

node.jsのv0.7以降でsocket.ioのv0.9.5を動かそうとすると
node.js
https://github.com/joyent/node/

(モジュールはnpmから)

RangeError: Maximum call stack size exceeded


で止まってしまう.

参考
http://jxck.tumblr.com/post/23479950868/socket-io-rangeerror-maximum-call-stack-size https://github.com/LearnBoost/socket.io/commit/e1884859bcbb57daeb843421cc5b4b95bd914bd8

以上のサイトを参考にsocket.io/lib/manager.jsを修正

-  this.oldListeners = server.listeners('request');	
-  server.removeAllListeners('request');
+  this.oldListeners = server.listeners('request').splice(0);

これでnode.js(v0.7)でsocket.ioが動くようになる.

socket.ioのchat exsample(exsample/chat/app.js)を動かす

https://github.com/learnboost/socket.io

このサンプルにはnode.jsのフレームワークexpressが使われているが
express v3.0.0alpha4 では仕様が変わっておりsocket.ioが止まってしまう

*nodeのモジュールのsocket.ioが止まってしまい、自動生成されHTML側で読み込まれるsocket.io/socket.io.jsが読み込まれない(404)
*adressがないと言われるのもこの仕様変更による問題

ということが起きるのでexpress v3.0.0用に変更する

- app.listen(3000, function () {
-   var addr = app.address();
-   console.log('   app listening on http://' + addr.address + ':' + addr.port);
- });
+ var http = http.createServer(app).listen(3000);
+ var io = require('socket.io').listen(http)
+   , nicknames = {};

expressのappがhttpオブジェクトを返さなくなったため httpオブジェクトを作ってsocket.ioではそれをlistenするように変更する必要がある.

node.jsをdebug実行してEclipseから確認する

参考 https://github.com/joyent/node/wiki/Using-Eclipse-as-Node-Applications-Debugger

node --debug [script]
node --debug-brk [script]

nodeでは以上のコマンドでデバッグ実行を行うが EclipseのGoogle Chrome Developer Toolsを使うとEclipse上から確認できる.

Eclipseで

http://chromedevtools.googlecode.com/svn/update/dev/

からDeveloper Toolsをインストールする.

Debug ConfigurationsのStandalone V8 VMを開きアドレス"5858"を設定する

これでnodeを実行したときにEclipse上からnode.jsのデバッグを行うことができる


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-05-27 (日) 13:10:34 (4352d)