首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只接收到PONG响应

只接收到PONG响应
EN

Stack Overflow用户
提问于 2020-05-12 17:35:35
回答 1查看 433关注 0票数 0

我已经在我的应用程序中实现了用于websocket通信的SocketRocket,但是由于这个库太老了,而且现在存档了,所以我们决定实现StarScream,它似乎是可信任的。

但是,在我从SocketRocket => StarScream迁移之后,我发现只有websockets的PONG响应和其他请求没有得到响应。

有人能帮我找到问题或者纠正我吗?

这是我的SocketRocket实现,在这里,我的websockets运行良好,即使在当前的现场生产应用程序中也是如此。

下面是我的StarScream实现,即使在生产配置中也不能工作,我对这两个应用程序使用相同的产品配置,但是SocketRocket在StarScream失败时工作。

如果您检查代码,您将看到与这两个实现有很大的相似之处,即使我没有收到适当的StarScream实现响应。我尝试每2秒发送一次ping请求,其中我得到了PONG响应,但一旦套接字被连接,我也会发送auth请求,而在SocketRocket中,我确实得到了对auth请求的响应。

  • connectSocket()是创建套接字的函数。请暂时忽略connectQuickStashSocket(),因为我已经对它进行了临时评论。
  • sendPing()现在也被省略了,因为我必须检查auth的响应,因此,注释sendPing()调用每2秒一次。
  • send()是在套接字上写入数据的主要函数,而且一旦写入数据,我也会得到完成回调,但我仍然没有得到任何响应。

注意:注释/取消注释sendPing()connectQuickStashSocket()不会更改响应,代码的行为也是一样的。

在这里,我为SocketRocket附加日志,您将看到所有请求/响应都正常工作:

代码语言:javascript
复制
>>>> 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请求的响应,它只显示作为请求写入的数据:

代码语言:javascript
复制
>>>> 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

请在这里建议我能做些什么,以及如何跟踪实际问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-18 14:22:48

我遇到了不同的错误,当我在本地机器上安装dev环境并在那里连接websockets时,我就知道了。

我从服务器上查看了日志,得到的是它给了我zlib - gzip : invalid header

因此,问题是服务器没有发送任何响应,因为它没有以正确的格式接收请求。

我通过POD更新了gzip库,现在我的套接字运行得很好。

呜呜!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61758255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档