socket.emit在函数内部

时间:2014-09-05 15:47:38

标签: node.js socket.io

我希望通过查询字符串将数据发送到我的节点,然后让它解析查询并采取相应的行动。

var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
url = require('url');

app.listen( 61337 );

function handler( request, response ) {
  var requestURL = url.parse(request.url, true);

  if( requestURL.query.message ) {
        var data = JSON.parse( decodeURI( requestURL.query.message ) );
        pushMe( data );
    }

  /** ... */
}

function pushMe( data ) {
    io.sockets.socket( data.socketid ).emit( data.action, data.value );
}

io.sockets.on('connection', function( socket ) {
  socket.on('join', function( data ) {
    /** ... */
  });

  socket.on('disconnect', function() {
    /** ... */
  });
});

我的pushMe函数如何返回错误:TypeError:Object没有方法'emit'

如何从我的函数中发出数据?

1 个答案:

答案 0 :(得分:0)

我需要将整个套接字保存到一个数组中,然后以这种方式访问​​它......

var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
url = require('url');

app.listen( 61337 );

var registeredSockets = [];

function handler( request, response ) {
  var requestURL = url.parse(request.url, true);

  if( requestURL.query.message ) {
        var data = JSON.parse( decodeURI( requestURL.query.message ) );
        pushMe( data );
    }

  /** ... */
}

function pushMe( data ) {
    registeredSockets[data.socketid].emit( data.action, data.value );
}

io.sockets.on('connection', function( socket ) {
  socket.on('join', function( data ) {
    registeredSockets[socket.id] = socket;
    /** ... */
  });

  socket.on('disconnect', function() {
    /** ... */
  });
});