Я весь день борюсь с проблемой и не могу с ней справиться. Я использую 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
.
Пожалуйста, если бы вы могли мне помочь, я был бы очень доволен