Узлы и сокет.конфликт портов сервера ввода-вывода

#node.js #socket.io

#node.js #socket.io

Вопрос:

У меня есть приложение NodeJS (которое также обслуживает клиента), и я пытаюсь реализовать связь в реальном времени между клиентом и сервером, поэтому я использую сокет.ввод-вывод для этого.

Я добавил следующий код в свой 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?

Ответ №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
    });
  }
}
  

Комментарии:

1. Я запускаю его на другом порту. проблема заключается в том, что сервер nodejs перезагружается через browsersync.

2. Вы можете использовать Nodemon для перезагрузки Node.js сервер после внесения изменений в код. npmjs.com/package/nodemon