如何将 socket.io 连接导出到另一个控制器 [英] How can I export socket.io connection to another controller

查看:28
本文介绍了如何将 socket.io 连接导出到另一个控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了一个问题.

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

I am making a Socket.IO connection in the bin file which is working, but can anyone tell me how I can export this connection to different controller. This is my bin file code.

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);

推荐答案

有很多技巧可以用来重用socket实例,一个简单简单的就是创建一个单一的类,以便能够:

There is plenty of techniques can be used to re-use the socket instance, an easy and simple one is to create a singular class, to be able to:

  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();

这篇关于如何将 socket.io 连接导出到另一个控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆