我注意到 Google C2DM (push) tcp 连接使用端口 5228。我还知道一些防火墙会阻止 80 443 以外的端口(因为 htttp 和 https),这导致很多用户抱怨他们无法使用 Market例如,使用公司 wifi 在他们的手机上使用 app 或 GTalk。
现在我的问题是:为什么 Google 没有选择 443 或 80 端口作为他们的持久 tcp 连接?
我注意到 Google C2DM (push) tcp 连接使用端口 5228。我还知道一些防火墙会阻止 80 443 以外的端口(因为 htttp 和 https),这导致很多用户抱怨他们无法使用 Market例如,使用公司 wifi 在他们的手机上使用 app 或 GTalk。
现在我的问题是:为什么 Google 没有选择 443 或 80 端口作为他们的持久 tcp 连接?
我能想到 Google 可能选择使用 5228 而不是 80 或 443 的原因有几个。
首先,在大多数(但绝对不是全部)情况下,5228 不应该是一个问题(即被阻止),因为推送通知主要在设备运行时使用。这意味着他们使用的手机数据连接不会阻止此端口并且没有防火墙。
其次,在可能有防火墙的环境中(即公司内部有 WiFi),http 流量也可能以某种方式被代理或控制。C2DM 不依赖于标准的 HTTP 协议,预计将是一个长期的连接。这意味着在 80/443 上运行它可能会在这些环境中导致问题。
第三,这些服务很可能在 C2DM 发布之前使用 5228,并且没有明确的理由来更改它。
根据我的经验,我认为如果他们使用 5228 作为默认值,并在其他情况下尝试回退到 443(因为肯定有很多情况下 443 可以工作而 5228 不能工作),那将是理想的选择。至少在 443 的情况下,与在端口 80 上相比,修改数据的可能性较小,因为该协议通常会被加密。但是,443上的连接仍然有可能被提前终止。但是,这种风险在任何网络环境中都存在,尝试也不会失败。
另外需要注意的是,在 443 上启用 C2DM 可能比谷歌看起来更困难,因为他们的分布式前端服务器可能知道如何专门处理 HTTP 的 80/443 流量,并且需要大量重新工作以处理 C2DM。
我怀疑他们想要获得其他东西的标准端口,这样他们就可以轻松监控 C2DM 流量的流量水平。
他们并不孤单,Apple 的推送实现也完全一样。