【问题标题】:Nodejs and socket.io server port conflictNodejs和socket.io服务器端口冲突
【发布时间】:2021-01-12 11:13:08
【问题描述】:

我有 NodeJS 应用程序(它也服务于客户端),并且我正在尝试实现客户端和服务器之间的实时通信,所以我为此使用了 socket.io。

我在 server.js 文件中添加了以下代码:

const app = express();

const server = http.createServer(app);
realtime.connect(server);
server.listen(3002, () => {
  console.log(`Listening on port 3002`)
});

但是每当我更改我的 nodejs 代码时,服务器就会崩溃:

Error: listen EADDRINUSE: address already in use :::3002

当 browsersync 重新加载我的 nodejs 应用程序时,如何解决这个问题并避免重新加载我的 socket.io 服务器的监听代码?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    您可以在单独的端口中运行套接字服务器。您还可以使用单独的函数作为身份验证的中间件。

    这是一个简单的例子

    > index.js

    import express from 'express';
    import Socket from './socket';
    
    const app = express();
    const port = process.env.PORT || 3000;
    const socketPort = process.env.SOCKET_PORT || 8001;
    const io = require('socket.io')(socketPort);
    
    // User Authentication
    // app.use(verifyToken);
    
    // Socket Authentication
    // io.use(socketTokenVerification);
        
    const socket = new Socket(io);
    socket.modelLoaded();
    
    app.listen(port, () => {
      log.info(`HTTP server is running ? on port ${port}
    Socket service running ? on port ${socketPort}
    Process Pid: ${process.pid}`);
    });
    

    > socket.js

    export default class {
      constructor(io) {
        this.io = io;
        this.connections = {};  // should be updated on connect and disconnect
      }
    
      addConnection(socket) {
        // your code here
      }
    
      removeConnection(socket) {
        // your code here
      }
    
      socketDisconnect(socket) {
        // your code here
      }
    
      modelLoaded() {
        const { io, connections } = this;
        io.on('connection', socket => {
          addConnection(socket);
          // any code here
        });
      }
    }
    

    【讨论】:

    • 我在不同的端口运行它。问题是通过 browsersync 重新加载 nodejs 服务器时。
    • 您可以在代码更改后使用 Nodemon 重新加载 Node.js 服务器。 npmjs.com/package/nodemon
    猜你喜欢
    • 2022-06-25
    • 2016-10-05
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2016-08-20
    • 2020-06-15
    相关资源
    最近更新 更多