最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

node.js - Socket IO Invalid WebSocket frame: RSV1 must be clear ( permessage deflate ) - Stack Overflow

programmeradmin2浏览0评论
require('dotenv').config();
const Agent = require(`./Models/agentModel`);
const logger = require(`./logger`);

const adminRoom = 'admin-room';

const socketapi = {
  io: null 
};

function setupSocket(io) {
  io.on('connection', (socket) => {
    console.log('Client connected:', socket.id);

    socket.on('authenticate', async (agentId) => {
      console.log('Authenticate event:', agentId);
      console.log(agentId.agentId);

      socket.agentId = agentId.agentId;

      const agent = await Agent.findOne({ agentId: agentId.agentId }, { user_role: 1, agentId: 1 }).lean();
      if (!agent) {
        logger.warn(`No Agent found in the DB, so can't join it in any room`);
        return;
      }
      if (agent && (agent.user_role === 'USR-1000' || agent.user_role === 'USR-1001')) {
        socket.join(adminRoom);
      }
      const agentRoom = `crm:${agent.agentId}`;
      socket.join(agentRoom);
      io.to(agentRoom).emit('hello', "hello");
      console.log(`Agent has successfully joined the socket room with room name as`, agentRoom);
    });

    socket.on('disconnect', () => {
      logger.info(`Client disconnected from the server: ${socket.agentId}`);
    });

    socket.on('error', (error) => {
      logger.error(`Socket error: ${error.message}`);
    });

    socket.on('message', (msg) => {
      console.log('Received message:', msg);
    });
  });
}

module.exports = { socketapi, adminRoom, setupSocket };

here is my socketApi.js file

require('dotenv').config();
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const createError = require('http-errors');
const cors = require('cors');
const http = require('http'); 
const debug = require('debug')('login:server'); 
const { socketapi, setupSocket } = require('./socketApi'); 

const app = express(); 
const port = normalizePort(process.env.PORT || '3000'); 
app.set('port', port);

// Create HTTP server and attach Socket.IO
const server = http.createServer(app); 
const io = require('socket.io')(server, {
  cors: {
    origin: "*",
    methods: ["GET", "POST", "PUT", "DELETE", "PATCH"],
    perMessageDeflate: false,
  },
  transports: ['websocket'],
});
socketapi.io = io; 
setupSocket(io); 

io.engine.on('initial_headers', (headers, req) => {
  console.log('WebSocket initial headers:', headers);
});
io.engine.on('headers', (headers, req) => {
  console.log('WebSocket response headers:', headers);
});

// Swagger documentation route
app.use('/doc', swaggerUi.serve, swaggerUi.setup(swaggerFile));
app.use(status());

// Connect to the database
require("./Models/Database.js").connectDatabase();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.set('trust proxy', true);


app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(cors());



app.use(function (req, res, next) {
  next(createError(404));
});

// Error handling
const ErrorHandler = require("./utils/errorHandler.js");
const { generatedErrors } = require("./middlewares/errors.js");
app.all("*", (req, res, next) => {
  next(new ErrorHandler(`Requested URL Not Found: ${req.url}`, 404));
});
app.use(generatedErrors);

if (process.env.Run_Cron) {
  logger.info(`Cron jobs starting`);
  leadPriorityCronJob.start();
  oneHourCron.stop();
} else {
  logger.info(`Cron jobs stopped`);
  leadPriorityCronJob.stop();
  oneHourCron.stop();
}

server.listen(port, '0.0.0.0', () => {
  logger.info(`Server is running on PORT: ${port}`);
});
server.on('error', onError);
server.on('listening', onListening);

function normalizePort(val) {
  var port = parseInt(val, 10);
  if (isNaN(port)) return val;
  if (port >= 0) return port;
  return false;
}

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }
  var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

module.exports = { app, server }; 

here is my app.js file

whenever i test the following code in localhost via postman everything works fine but when i deploy the server on render it always gives the error message that "Error: Invalid WebSocket frame: RSV1 must be clear" , "sec-websocket-extensions: permessage-deflate; client_max_window_bits"

here are the logs from the server : WebSocket initial headers: { 'Access-Control-Allow-Origin': '' } WebSocket response headers: { 'Access-Control-Allow-Origin': '' }

can anyone please tell me why this issue is arising when i deploy the server what could be the reason, i already tried permessage: flase / true both but it ain't working.

can anyone please tell me why this issue is arising when i deploy the server what could be the reason, i already tried permessage: flase / true both but it ain't working.

发布评论

评论列表(0)

  1. 暂无评论