Веб-сокеты принимают только ответы PONG

Я реализовал SocketRocket для связи через веб-сокеты в своем приложении, но поскольку эта библиотека устарела и пока заархивирована, мы решили реализовать StarScream, которому можно доверять.

Однако после перехода с SocketRocket => StarScream я обнаружил, что для моих веб-сокетов получено только PONG ответов, а на другие запросы нет ответа.

Кто-нибудь поможет мне найти проблему или исправить меня?

Вот моя реализация SocketRocket, где мои веб-сокеты работают нормально даже в текущем живом производственном приложении.

Вот моя реализация StarScream, которая не работает даже в продакшене конфигурации, я использую одинаковые производственные конфигурации для обоих приложений, но SocketRocket работает, а StarScream не работает.

Если вы проверите код, вы увидите много общего с обеими реализациями, даже несмотря на то, что я не получаю надлежащего ответа для реализации StarScream. Я пытаюсь отправлять запросы ping каждые 2 секунды, для которых я получаю ответ PONG, но я также отправляю запрос auth после подключения сокета, на который я никогда не получаю ответа, в то время как в SocketRocket я получаю ответ на запрос аутентификации.

  • connectSocket() — это функция, в которой создаются сокеты. Пожалуйста, пока игнорируйте функцию connectQuickStashSocket(), так как я временно прокомментировал ее.

  • sendPing() также пока опущен, так как я должен проверять ответ на аутентификацию, поэтому прокомментировал вызов sendPing() каждые 2 секунды.

  • send() - это основная функция, в которой происходит запись данных в сокет, и я также получаю обратный вызов завершения после записи данных, но я не получаю никакого ответа.

ПРИМЕЧАНИЕ. Комментирование/раскомментирование sendPing(), connectQuickStashSocket() не изменит ответ, и код будет вести себя так же.

Здесь я прикрепляю журналы для SocketRocket, где вы увидите, что все запросы/ответы работают нормально:

>>>> Connected to Socket
Optional("d2ee02da-e4de-4593-90e6-36598c00982d")
>>>> 
{
  "kind" : "auth",
  "uuid" : "",
  "auth" : {
    "version" : "1.4.0",
    "privateKey" : "d2ee02da-e4de-4593-90e6-36598c00982d",
    "device" : {
      "type" : "ios",
      "properties" : [

      ],
      "id" : "A5F24445-C688-43B0-98C1-96C636EFA08F"
    }
  }
}
>>>> Finished receiving socket data in 0.0020380020141601562 seconds
>>>> Deserialized pong data of length 25 in 0.0008620023727416992 seconds
>>>> Finished receiving socket data in 0.33321893215179443 seconds
>>>> Deserialized auth data of length 95 in 7.49826431274414e-05 seconds
>>>> 
{
  "sync" : {
    "collections" : {
      "24191c17-463c-4de9-b718-cad41976460c:stash" : {
        "cache" : {
          "e4d4804e-07a4-49f5-91f4-1b65935d4d8e" : 1,
          "8834da09-a26d-4a0f-806a-f3c54fff175e" : 1,
          "98a01deb-cfc7-4939-a6ce-d2dc64afe3a8" : 1,
          "80986d67-e0a4-4f4d-85c0-e263989f0044" : 1,
          "dd54420d-553b-4f43-808e-6cbdfcd0fe76" : 1,
          "1da73786-da7c-4b3f-b99f-58b907d15cc2" : 2,
          "c32c0a9a-c754-412e-af42-b8859a56ca72" : 1
        }
      },
      "24191c17-463c-4de9-b718-cad41976460c:inbox" : {
        "cache" : {

        }
      }
    }
  },
  "kind" : "sync"
}
>>>> Finished receiving socket data in 0.421644926071167 seconds
>>>> Deserialized sync data of length 2473 in 0.000841975212097168 seconds
Processed json and written to realm in 0.0073059797286987305 seconds
Initial state processed

Вот журналы для StarScream, где получено только PONG, а ответ на запрос auth не получен, он показывает только данные, записанные как запрос:

>>>> websocket is connected: ["Upgrade": "websocket", "Access-Control-Allow-Credentials": "true", "Date": "Tue, 12 May 2020 16:55:18 GMT", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "cf-request-id": "02ab68f8400000dcd233395200000001", "Access-Control-Allow-Origin": "wss://mercury.speare.io", "CF-Cache-Status": "DYNAMIC", "CF-RAY": "5925aaa06d91dcd2-SIN", "Sec-WebSocket-Accept": "szN0nnvUplvghVle+n4FXOFp2cw=", "Server": "cloudflare", "Connection": "upgrade"]
Connected to Socket
Optional("d2ee02da-e4de-4593-90e6-36598c00982d")
{
  "kind" : "auth",
  "auth" : {
    "privateKey" : "d2ee02da-e4de-4593-90e6-36598c00982d",
    "version" : "1.4.0",
    "device" : {
      "id" : "A5F24445-C688-43B0-98C1-96C636EFA08F",
      "type" : "ios",
      "properties" : [

      ]
    }
  },
  "uuid" : ""
}
>>>> Received data: 47
Finished receiving socket data in 0.0007439851760864258 seconds
Deserialized data pong of length 25 in 0.0006880760192871094 seconds
2020-05-12 22:25:18.520913+0530 Stash[3952:884630] Socket done writing data => auth

Пожалуйста, предложите мне здесь, что я могу сделать и как отследить реальную проблему.


person Paresh Thakor    schedule 12.05.2020    source источник


Ответы (1)


Я столкнулся с другой ошибкой, о которой узнал, когда настроил среду разработки на своем локальном компьютере и подключил там веб-сокеты.

Я проверил журналы с сервера и понял, что он дает мне zlib - gzip : invalid header.

Итак, проблема заключалась в том, что сервер не отправлял никакого ответа, поскольку не получал запрос в правильном формате.

Я обновил библиотеку gzip через POD, и теперь мои сокеты работают отлично.

Вау..!

person Paresh Thakor    schedule 18.05.2020