【问题标题】:what is the best way to use socket.io with expressjs app?将 socket.io 与 expressjs 应用程序一起使用的最佳方法是什么?
【发布时间】:2022-01-02 13:37:04
【问题描述】:

我想用 socket.io 编写一个实时聊天应用程序,因为我的服务器和应用程序文件是分开的,我有点不知道我应该如何构造它以在我的其他部分使用 socket.io 实例应用程序。 这是我的app.js 文件。

const express = require("express");
const pug = require("pug");
const app = express();

module.exports = app;

这是我的server.js 文件

const app = require("./app");
const mongoose = require("mongoose");
mongoose
  .connect(`mongodb://localhost:27017/${process.env.DATABASE}`)
  .then(() => {
    app.listen(process.env.PORT);
  })
  .catch((err) => {
    console.error(`connection failed: ${err}`);
  });

创建 socket.io 实例并启动它的连接以用于应用程序的其他部分的最佳方法是什么?

【问题讨论】:

  • 没有最好的办法。它们大多不相关。
  • 所以不是最好的方法,我怎样才能将它们与这种方法一起使用?
  • 重复问题涵盖了这两个选项。

标签: node.js express socket.io


【解决方案1】:

您可以将 http 与 express 应用程序一起使用,然后通过该 http 连接连接套接字,您可以在 io.on('connection') 中侦听和发出主题

const app = require("./app");
const mongoose = require("mongoose");
const http = require('http').Server(app);
const io = require('socket.io')(http);
mongoose
  .connect(`mongodb://localhost:27017/${process.env.DATABASE}`)
  .then(() => {
    app.listen(process.env.PORT);
    io.on('connection', socket => {
      console.log('socket connected',socket);
    });
  })
  .catch((err) => {
    console.error(`connection failed: ${err}`);
  });

我更喜欢第二种方式:

App.js

const express = require("express");
const pug = require("pug");
const app = express();
module.exports = app;

Server.js

const app = require("./app");
const realtime = require("./realtime");
const mongoose = require("mongoose");
const server = require("http").Server(app);

mongoose
  .connect(`mongodb://localhost:27017/${process.env.DATABASE}`)
  .then(() => {
    app.listen(process.env.PORT);
    require("./realtime.js")(server);

  })
  .catch((err) => {
    console.error(`connection failed: ${err}`);
  });

Realtime.js

module.exports = (app) => {
    const io = require("socket.io")(app);
    io.on("connection", (socket) => {
      console.log("Socket connected")
    })
};

【讨论】:

  • 使用这种方法如何在其他文件中使用 io 实例来管理聊天?
猜你喜欢
  • 2018-12-16
  • 2014-12-19
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多