У меня есть следующий файл сервера:
const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = module.exports.io = require('socket.io')(server)
const PORT = process.env.PORT || 3231
const SocketManager = require('./SocketManager')
app.use(express.static(__dirname + '/../../build'))
io.on('connection', SocketManager)
server.listen(PORT, ()=>{
console.info("Connected to port:" + PORT);
})И я подключаю его на переднем конце следующим образом:
import React, { Component } from 'react';
import io from 'socket.io-client';
import Game from '../Game/Game';
import axios from 'axios'
const socketUrl = "/"
const socket = io(socketUrl)Но я продолжаю получать это в своей консоли:
Не удалось загрузить ресурс: сервер ответил со статусом 405 (не разрешено)
Я действительно не уверен, что нужно изменить или настроить, чтобы исправить ошибку.
и разбить эту строку и экспортировать отдельно const io = module.exports.io = require('socket.io')(server)
это отдельные файлы, а не один и тот же файл, я не думаю, что это имеет какое-либо отношение к тому, почему ошибка 405 вообще происходит, просто так, как вы предпочитаете, чтобы она отображалась на основе ваших собственных рекомендаций.
Я хотел спросить, размещаете ли вы свой интерфейс на том же сервере, на котором работает сокет?
Я размещаюсь на героку, если это помогает, я также использую Auth0 для аутентификации, чтобы войти в систему, если это может быть связано с чем-то, но я не верю, что это так.
Это работает на вашей локальной установке? и под размещением в той же настройке я не имел в виду онлайн-хостинг, я имею в виду, как вы используете свой интерфейсный код? Используете ли вы веб-пакет/другие инструменты для его запуска? или вы обслуживаете html-файл, в который включен bundle.js, на том же сервере узла, на котором вы используете сокет?





Моя настройка не подходила для людей, у которых возникли проблемы с подключением socketio к их бэкэнду из реагирующего интерфейса. Это сработало для меня:
const express = require('express')
const app = express()
const server = require('http').Server(app)
const io = module.exports.io = require('socket.io')(server, { origins: '*:*'})
const path = require('path')
// for prod dont use port #
const PORT = process.env.PORT || 3001
const SocketManager = require('./socketmanager')
app.use(express.static(path.join(__dirname, 'build')));
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
io.on('connection', SocketManager)
server.listen(PORT, ()=>{
console.info("Connected to port:" + PORT);
})
Ваш внешний интерфейс размещен на том же внутреннем сервере (серверном файле), где у вас есть сервер сокетов?