Я пытаюсь подключиться к socket.io-client, используя следующий код:

Клиент :

import queryString from 'query-string';
import React, { useEffect, useState } from 'react';
import io from 'socket.io-client';

let socket;

const Chat = ({location}) => {

const [name, setName] = useState("");
const [room, setRoom] = useState("");
const EP = 'http://localhost:5000/';

useEffect(() =>{
    const {name , room} = queryString.parse(location.search);

    socket = io(EP);

    setName(name);
    setRoom(room);

    console.log(socket);
},[EP, location.search])

return(
    <h1>helloooooooooooooo {name} welcome to {room}</h1>
)
}

export default Chat;

Сервер :

const express = require('express');
const socketio = require('socket.io');
const http = require('http');
const router = require('./router/router');

const PORT = process.env.PORT ||5050;

const app = express();
const server = http.createServer(app);
const io = socketio(server);




//socket.io

io.on('connection', socket => {
console.log("we have a new user!!!!!!!!!");

socket.on('disconnect', () =>{
    console.log('User had left!');
})
})

// io.on('connection', socket => { 
//     console.log("we have a new user!!!!!!!!");

//     socket.on("disconnect", () => console.log("user is left"))        
//  });

app.use(router);

server.listen(PORT, () => console.log(`Server has started on ${PORT}`));

Я не получаю журнал подключения или отключения консоли от этого сокета сервера. Я следую тому же процессу, что и socke.io doc.

консольное сообщение из браузера, показывающее отключенное истинное и подключенное ложное и без идентификатора

0
Mizanur Rahman Sohan 17 Янв 2021 в 16:50

2 ответа

Лучший ответ

В клиенте внутри useEffect вместо

socket = io(EP);

К этому

socket = io.connect(EP , {
        "force new connection" : true,
        "reconnectionAttempts": "Infinity", 
        "timeout" : 10000,                  
        "transports" : ["websocket"],
        withCredentials:true,
            extraHeaders:{
                "my-custom-header": "abcd"
            }
    });

я получил это решение из этого вопроса

0
Mizanur Rahman Sohan 18 Янв 2021 в 09:44

Начиная с Socket.IO v3, вам необходимо явно включить Cross-Origin Resource Sharing (CORS). https://socket.io/docs/v3/handling-cors/

// server-side
const io = require("socket.io")(httpServer, {
  cors: {
    origin: "https://example.com",
    methods: ["GET", "POST"],
    allowedHeaders: ["my-custom-header"],
    credentials: true
  }
});

// client-side
const io = require("socket.io-client");
const socket = io("https://api.example.com", {
  withCredentials: true,
  extraHeaders: {
    "my-custom-header": "abcd"
  }
});
0
Shashank 17 Янв 2021 в 13:55