如何在node.js中的不同路由之间使用socket.io

时间:2019-01-01 08:56:28

标签: javascript node.js socket.io

我在node js应用程序中使用不同的路由,并且必须在每条路由中使用socket.io来制作我的nodereact js应用程序即时的。但是,我的 node js 应用程序具有以下结构。

router.js

const express = require('express');
const router = express.Router();

const worksheetController = require('../controllers/worksheet')
const attendenceController = require('../controllers/attendence')

router.route('/worksheets')
 .get(
    worksheetController.getWorksheet
 )
 .post(
    worksheetController.validateWorksheet,
    worksheetController.addWorksheet,
    attendenceController.markAttendence
 )  

router.route('/attendances')
 .get(
    attendenceController.getAttendance
 )

module.exports = router;

server.js

const express = require('express');
const router = require('./router');

const app = express();
app.use('/api', router);

app.listen('5000', () => {
  console.log('Listening on port');
});

module.exports = app;
  

所以,我想知道

     

1)如果需要使用socket.io,是否应该使用http模块来创建服务器。

     

2)如何将socket.io用于不同的路由。

我发现与我关于stackoverflow的问题相匹配的帖子,分别是thisthisthis。但是我不认为这对我有用。所以请帮助我。

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用http模块或socket.io文档中的其他模块来使用socket.io
  2. 我不确定你的想法。但是当您想要实现socket.io时。我认为您应该运行另一个节点应用程序。 (这意味着您有2个nodejs应用程序。通常1个用于节点http,1个用于socket.io应用程序)。初始化socket.io应用程序path后,可以使用https://socket.io/docs/server-api/#new-Server-httpServer-options选项。因为当您部署到生产时。您应该在代理服务旁边(例如:nginx)运行socket.io应用。 Socket.io基本上支持多种传输和协议。因此,如果与http restful一起使用。如何配置从nginx到socket.io应用程序的连接映射,如何设置错误处理程序?。

在您的情况下: +创建新文件socket.js:

// socket.js
var http = require('http')
var socket_io = require('socket.io')

function init_socket(app) {
    const server = http.Server(app)
    const io = socket_io(server, { path: 'your-path-want-for-socket-io' }) // default: /socket.io/
}
import {init_socket} from 'socket.js'
init_socket(app)