Google Cloud Compute Engine закрывает соединение через веб-сокет, прежде чем сервер сможет его обработать. - PullRequest
0 голосов
/ 01 ноября 2019

Клиенты, пытающиеся подключиться к веб-сокет-серверу Spring Cloud Engine с Google Cloud Compute, закрывают соединение: 1000 мгновенно. Что я делаю не так?

Я использую весенний сервер websocket / rest на экземпляре Google Cloud Compute Engine. Правила брандмауэра были правильно настроены, и подключение к виртуальной машине работает через браузер, но если я пытаюсь открыть подключение к веб-сокету, оно мгновенно закрывается. Подключение веб-сокетов к тому же серверу на моем локальном компьютере без проблем подключается, и протоколирование http показало, что сервер никогда не получает запрос для запуска. Клиенты веб-сокета получают закрытое соединение: 1000. Это код клиента веб-сокета:

`

void clientConnect(){
  Serial.print("Sending connection to: ");
  HTTPClient http;
  http.begin(SERVER_ADDR);
  int httpCode = http.GET();
  if(httpCode > 0){
    String parload = http.getString();
    http.end();
    int url = parload.indexOf("http");
    int lastUrl = parload.lastIndexOf("\"");
    String u = parload.substring(url + 4,lastUrl);
    serverUrl = u;
  }
  Serial.println(serverUrl);
  clnt.begin("35.247.188.177",80,"/network");
  clnt.setReconnectInterval(RECONNECT_DELAY);
}
    void gotEvent(WStype_t type, uint8_t * payload, size_t length) {
  switch(type) {
    case WStype_DISCONNECTED:
      Serial.printf("[WSc] Disconnected!\n");
      break;
    case WStype_CONNECTED: {
      Serial.printf("[WSc] Connected to url: %s\n", payload);
      // send message to server when Connected
      clnt.sendTXT("Connected");
    }
      break;
    case WStype_TEXT:
      Serial.printf("[WSc] get text: %s\n", payload);
      // send message to server
      // webSocket.sendTXT("message here");
      break;
    case WStype_BIN:
      Serial.printf("[WSc] get binary length: %u\n", length);
      // send data to server
      // webSocket.sendBIN(payload, length);
  break;
    case WStype_PING:
        // pong will be send automatically
        Serial.printf("[WSc] get ping\n");
            break;
        case WStype_PONG:
            // answer to a ping we send
            Serial.printf("[WSc] get pong\n");
            break;
    }
}

Конфигурация сервера веб-сокета:

    @Configuration
@EnableWebSocket
public class WebSocketConfiguration implements WebSocketConfigurer {
    private static Logger logger = LoggerFactory.getLogger(WebSocketConfiguration.class);

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
        logger.info("Registering websocket handlers");
        webSocketHandlerRegistry.addHandler(new DoorSocketConnectionHandler(),"/network").setAllowedOrigins("*");
    }
}

Клиенты подключаются сникаких проблем на моей локальной машине через локальную сеть, но при перемещении сервера на сервер облачных вычислений Google они мгновенно закрываются. Журналы HTTP показывают, что сервер никогда не получал запрос на запуск, а журналы spring / actator / httptrace пусты

1 Ответ

0 голосов
/ 01 ноября 2019

Видимо, это могло быть вызвано тем, что я был на мобильной мобильной точке Android. Возможно, Android блокировал создание сокетов по внешним адресам.

...