Socket.io + REST API + REACT - 将 socket.io 与 REST API 分开更好吗

Socket.io + REST API + REACT - is it better to separate socket.io from REST API

我的问题可能会被标记为“基于意见”,但我想知道哪种方法最适合我的应用程序,因为我可以两种方式进行。

我正在构建聊天应用程序,其中的用户和对话保存在 MongoDB 中。我会让我的 React 应用程序消耗 API/APIs。问题是 - 将 REST API 和 Socket.io 应用程序 运行 分开会更好吗?例如:

  1. 在端口 3005
  2. 上有 REST API 运行
  3. 在端口 3006
  4. 上有 Socket.io 运行

React 应用程序分别使用这两个,基本上它们不会相互了解。我在 REST 中的端点 API 端点和 socket.io 将仅在前端调用。

另一方面,我可以让我的 socket.io 应用程序和 REST API 在一个大应用程序中协同工作。我认为它可以毫无问题地工作。

总而言之,乍一看我会采用第一种方法 - 更清洁且易于维护。但我想听听其他意见,或者是否有人有类似的项目。当你有 socket.io 和 REST API?

时,通常在这种项目中是如何制作的

您可以为 socket.io 逻辑创建一个单独的文件,例如 this:

// socket.mjs file
import { Server } from "socket.io"

let io = new Server()
const socketApi = {
    io: io
}

io.on('connection',(socket)=>{
    console.log('client connected:', socket.id)

    socket.join('modbus-room')

    socket.on('app-server', data=>{
        console.log('**************')
        console.log(data)
        io.to('modbus-room').emit('modbus-client', data)
    })

    socket.on('disconnect',(reason)=>{
        console.log(reason)
    })
})

export default socketApi

并将其添加到您的项目中,如 this:

// index.js or main file
//...
import socketApi from "../socket.mjs";
//...
//
/**
 * Create HTTP server.
 */

const server = http.createServer(app);
socketApi.io.attach(server);
//

我会检查这两种情况的优缺点。例如,如果您只有一个应用程序并且您不必关心哪些版本相互兼容,则代码和资源的可重用性会更好。另一方面,一个错误可以杀死两个应用程序,因此从安全角度来看,最好有单独的应用程序。我认为这个决定取决于对你来说重要的利弊。