首页 > 开发 > NodeJS > 正文

socket.io中是否可以在connection外部调用socket

2017-09-08 17:11:30  来源:网友分享

官网提供的例子是这样的:

var app = require('http').createServer(handler)var io = require('socket.io')(app);io.on('connection', function (socket) {  socket.emit('news', { hello: 'world' });  socket.on('my other event', function (data) {    console.log(data);  });});// 这里能否访问socket?

也就是说任何发送和监听信息的操作都需要在io.on('connection', function(socket){...}里进行,我的问题是,这个socket可否在这个scope外部调用?

我试过用io.emit可以emit信息,但是一些复杂的比如点对点发送socket.broadcast.to(socketid)还没有找到解决的方法

解决方案

自己解决了

可以用node.js的event类做一个简单的内部通信

var app = require('http').createServer(handler)var io = require('socket.io')(app);var EventEmitter = require('events').EventEmittervar emitter = new EventEmitter();io.on('connection', function (socket) {  emitter.on('LOCAL_FWD', function(message) {      console.log('Received local message' + message);      socket.broadcast.to(xxx).emit('YYY', message);  }    socket.on('my other event', function (data) {    console.log(data);  });});emitter.emit('LOCAL_FWD', 'test message');