Не удалось переподключить сокет node.jsJavascript

Форум по Javascript
Ответить
Anonymous
 Не удалось переподключить сокет node.js

Сообщение Anonymous »

Я новичок в Socket.io;
соединение успешное, «излучает» сигналы тревоги и «включено» успешно прослушивается с обеих сторон. но когда я перезагружаю свой интерфейс, соединение теряется; я неоднократно находил в консоли интерфейса это-

Код: Выделить всё

  code: 'WS_ERR_EXPECTED_FIN',
[Symbol(status-code)]: 1002
},
[Symbol(kMessage)]: 'Invalid WebSocket frame: FIN must be set'
},
контекст: неопределенный,
тип: 'TransportError'

если перезапустить мой внутренний сервер node.js, то снова будет установлено соединение (новое). я думаю, что это проблема моего внутреннего сервера, что я могу сделать?
мой внутренний index.js-

Код: Выделить всё

const http = require("http");
const { initializeSocket } = require("./config/socket");
init();
async function init() {
try {
db = await mongoose();
console.log("MongoDB Connected!");
} catch (err) {
logger.verbose("[index/init]" + err);
console.log(33, err);
}
global.settings = await Settings.findOne();
...
initializeSocket(httpServer);
httpServer.listen(process.env.PORT, () => {
console.log(`Server running on ${process.env.APP_URL}${process.env.PORT}`);
});
}
и мой серверный файл config/socket.js

Код: Выделить всё

const socketIO = require("socket.io");
const { createAdapter } = require("@socket.io/redis-adapter");
let io = null;
const initializeSocket = (httpServer) => {
const allowedOrigins = [
"http://localhost:3000",
"http://localhost:3002",
"http://localhost:4005",
"null", //for native apps (Android/iOS)
];
io = socketIO(httpServer, {
transports: ["polling", "websocket"],
allowUpgrades: true,

pingTimeout: 20000,
pingInterval: 25000,
cors: {
origin: (origin, callback) => {
console.log("origin", origin);
console.log(
!origin || origin === "null" || allowedOrigins.includes(origin)
);
if (!origin || origin === "null" || allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error("Not allowed by CORS"));
}
},
methods: ["GET", "POST", "OPTIONS"],
credentials: true,
},
perMessageDeflate: true,
});
// Attach Redis adapter
// io.adapter(createAdapter(pubClient, subClient));
io.engine.on("connection_error", (err) => {
console.log("ENGINE CONNECTION ERROR");
logger.error("ENGINE CONNECTION ERROR", err);
console.log(err);
});
io.on("connection", function (socket) {
const origin = socket.handshake.headers.origin;
console.log(`[socket] Client connected: ${socket.id} from ${origin}`);

socket.conn.on("upgrade", () => {
console.log("UPGRADED TO", socket.conn.transport.name);
});

// Operator connects
socket.on("operatorConnected", (operatorId) => {
const roomName = `operator_${operatorId}`;
socket.join(roomName);
console.log(`Operator ${operatorId} connected: ${socket.id}`);
socket.on("disconnect", () => {
socket.leave(roomName);
console.log(`Socket ${socket.id} left room ${roomName}`);
});
});
socket.on("disconnect", () => {
console.log(`[socket] ${socket.id} disconnected`);
});
});
console.log("Socket running on same Server !");
};
module.exports = {
initializeSocket,
getIO: () => io,}
а это мои хуки next.js для интерфейса —

Код: Выделить всё

import { useEffect, useContext } from "react";
import { socket } from "../../utils/socket";
import { AppContext } from "../context/AppContext";
export default function useOperatorSocket() {
const { authUser, setOperatorDrivers } = useContext(AppContext);
// CONNECT
useEffect(() => {
if (!socket.connected) {
socket.connect();
}
return () => {};
}, []);
и мой next.js utils/socket.js

Код: Выделить всё

import { io } from "socket.io-client";
//ROOT_URL: "http://localhost:9005"
const socket = io(process.env.ROOT_URL, {
transports: ["websocket"],
reconnection: true,
reconnectionAttempts: Infinity,
});
//Connection event handlers
socket.on("connect", () => {
console.log("Connected to server");
});
socket.on("disconnect", () => {
console.log("Disconnected from server");
});

// Error handling
socket.on("connect_error", (error) =>  {
console.log("20");
console.dir(error, { depth: null });
});



Подробнее здесь: https://stackoverflow.com/questions/798 ... ion-failed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»