首页 > 解决方案 > 如何将 socket.io 连接导出到另一个控制器

问题描述

我陷入了一个问题。

我正在工作的 bin 文件中建立 Socket.IO 连接,但谁能告诉我如何将此连接导出到不同的控制器。这是我的 bin 文件代码。

var app = require('../app');
var debug = require('debug')('userservice:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3015');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', (socket) => {
  console.log('Connection made #######################################################.', socket.id);
  socket.on('disconnect', () => {
    console.log('Connection disconnected @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.', socket.id);
  });
});
/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

标签: node.jssocket.io

解决方案


有很多技术可以用来重用套接字实例,一个简单而简单的方法是创建一个单一的类,以便能够:

  1. 启动套接字实例
  2. 将实例导出到其他模块

socket.js:

let io;

module.exports = {
  init: (server) => {
    io = require('socket.io').listen(server); io.origins('*:*');
    return io;
  },
  get: () => {
    if (!io) {
      throw new Error("socket is not initialized");
    }
    return io;
  }
};

server.js:

const app = require('../app');
const http = require('http');

/**
 * Get port from environment and store in Express.
 */

const port = '3015';
app.set('port', port);

/**
 * Create HTTP server.
 */

const server = http.createServer(app);
const io = require('./socket.js').init(server);

io.on('connection', (socket) => {
  console.log('Connection success', socket.id);
  socket.on('disconnect', () => {
    console.log('Connection disconnected', socket.id);
  });
}

现在您可以在其他模块中使用它。

const io = require('./socket.js').get();

推荐阅读