Невозможно подключить клиента к серверу websocket - PullRequest
0 голосов
/ 02 августа 2020

Я весь день борюсь с проблемой и не могу с ней справиться. Я использую Socket.io для Java и сделал очень простой сервер с помощью Spring Boot:

@Component
@RequiredArgsConstructor
public class SocketConnection {
    private final SocketIOServer server = new SocketIOServer(getSocketConfiguration());

    @PostConstruct
    public void startSocketServer() {
        server.start();
        server.addConnectListener(this::sendAnnouncementToClient);
    }

    public Configuration getSocketConfiguration() {
        Configuration config = new Configuration();
        config.setPort(2000);
        return config;
    }

    public void sendAnnouncementToClient(SocketIOClient client) {
        client.sendEvent("announcement", "Some text");
    }
}

Я использую socket.io-client с React. js в качестве клиента, и я хочу подключитесь к серверу следующим образом:

const socket = socketIOClient("https://mydomain.herokuapp.com", {
    reconnection: true,
    reconnectionAttempts: Infinity,
    reconnectionDelay: 1000,
    reconnectionDelayMax: 5000,
    randomizationFactor: 0.5,
    policyPort: 2000
});

class SocketData extends Component {

    state = {
        websocketData: [],
        isClientConnected: true
    }

    componentDidMount() {
        socket.on("connect", () => {
            this.setState({
                isClientConnected: true
            })
        });
        socket.on("connect_error", error => {
            console.log(error);
            console.log("CONNECTION ERROR")
            this.setState({
                isClientConnected: false
            })
        })
        socket.on("announcement", data => {
            console.log(data);
            this.setState({
                websocketData: data
            })
        })
    }

    render() {
        if (this.state.isClientConnected) {
            if (this.state.websocketData) {
                return this.state.websocketData
            } else {
                return "Waiting...";
            }
        } else {
            return "Not connected!";
        }
    }
}

Локальный запуск работает нормально. Клиент подключается к серверу и наоборот. Проблема возникает, когда я хочу отправить весь сервер на платформу Heroku (таким образом, чтобы клиент работал локально, только сервер был развернут). Сразу после перехода к https//localhost:3000/ в консоли появляется сообщение: GET https://mydomain.herokuapp.com/socket.io/?EIO=3&transport=polling&t=NEmqdq8:

State: 404
Version: HTTP/1.1
Headers: {
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:3000
[...]

По сути, похоже, что клиент не может найти путь для подключения, и я не знаю, почему . Я абсолютно уверен, что Socket.IO включился правильно, о чем свидетельствует это сообщение при запуске Spring Boot: 2020-08-02T19:45:27.999136+00:00 app[web.1]: 2020-08-02 19:45:27.998 INFO 4 --- [ntLoopGroup-2-1] c.c.socketio.SocketIOServer: SocketIO server started at port: 2000.

Пожалуйста, если бы вы могли мне помочь, я был бы очень доволен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...