Как лучше всего использовать сокет.ввод-вывод с помощью приложения expressjs?

0

Вопрос

Я хочу написать приложение для чата в реальном времени с помощью сокета.ввод-вывод, и поскольку мой сервер и файл приложения разделены, я понятия не имею, как мне его структурировать, чтобы использовать сокет.экземпляр ввода-вывода в других частях моего приложения. Это мой 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}`);
  });

каков наилучший способ создания экземпляра сокета.ввод-вывод и запуск подключения для использования в других частях приложения?

express node.js socket.io
2021-11-24 06:06:36
1

Лучший ответ

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")
    })
};
2021-11-24 06:33:04

при таком подходе как я могу использовать экземпляр ввода-вывода в других файлах для управления чатами?
Farid Ghaderi

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................