2011-12-26 5 views
1

私はsocket.ioで遊び始めています。どのオブジェクトにどのメソッドがあるか、コールバックの仕組みなどを見つけるのはかなり難しいので、もっと書かれたドキュメントを見たいと思っています。Socket.ioが有効範囲外か方法が不足していますか?

は、だから私は急行とsocket.ioでこれを試してみました:

var app = require('express').createServer() 
    , io = require('socket.io').listen(app); 
app.listen(8080); 
var clients = []; 

/*Routes*/ 
app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 
app.get('/user/:id', function(req, res){ 
    io.sockets.broadcast.emit('user', {id: req.params.id}); 
}); 
io.sockets.on('connection', function (socket) { 
    clients.push(socket.id); 
    io.sockets.socket(socket.id).emit('connection', clients); 
    socket.broadcast.emit('conexion', { id: socket.id }); 
}); 

とアクセスしよう:localhostを:8080 /ユーザー/テストそれが動作し、次のように出力されません:

TypeError: Cannot call method 'emit' of undefined 
    at /var/www/node/app.js:11:26 
    at callbacks (/var/www/node/node_modules/express/lib/router/index.js:272:11) 
    at param (/var/www/node/node_modules/express/lib/router/index.js:246:11) 
    at param (/var/www/node/node_modules/express/lib/router/index.js:243:11) 
    at pass (/var/www/node/node_modules/express/lib/router/index.js:253:5) 
    at Router._dispatch (/var/www/node/node_modules/express/lib/router/index.js:280:4) 
    at Object.handle (/var/www/node/node_modules/express/lib/router/index.js:45:10) 
    at next (/var/www/node/node_modules/express/node_modules/connect/lib/http.js:203:15) 
    at Object.handle (/var/www/node/node_modules/express/lib/http.js:84:5) 
    at next (/var/www/node/node_modules/express/node_modules/connect/lib/http.js:203:15) 

私の推測では、呼び出しが範囲外であるか、またはメソッドが存在しないか、何でもありません。どうすればこの問題を解決できますか?

+1

'io.sockets.broadcast.emit'の代わりに' io.sockets.emit( 'user'、{id:req.params.id});を試してください。 – alessioalex

+0

これは@alessioalexを使っています:) –

+0

私はあなたがアップホートして受け入れることができるように答えとして私のコメントを追加しました。 (その質問は未回答のようには表示されないように) – alessioalex

答えて

3

io.sockets.broadcast.emitの代わりにio.sockets.emit('user', {id: req.params.id});を使用してください。