我希望服务器能够随时向客户端发送消息。几天内可能没有消息,但是如果发送了一封消息,我希望它几乎立即被接收(理想情况下在1秒或更短时间内)。如果不将客户端设置为服务器并使用端口转发,我将如何解决此问题?
这方面的一个例子是移动设备上的推送通知。 Apple几乎可以立即向iPhone发送推送通知。但是,iPhone并不是一个服务器。此外,iPhone可能正在从网络移动到网络,并且网络不会将任何端口转发到iPhone。这是如何运作的?假设存在某种持久连接,该解决方案如何扩展到同时连接的数亿个设备?
这个问题并不取决于特定的语言。我目前在JS工作。我主要是寻找一个概念性答案,但如果有帮助,请随意在任何语言的背景下回答。
答案 0 :(得分:0)
请记住,一旦建立了网络连接,数据就可以在任一方向上流过它。没有要求对等体在连接的“接收”端接收数据!
在存在非蜂窝网络*的情况下,iPhone推送通知的工作原理是让设备连接到Apple通知服务器,然后等待从中接收数据。无需端口转发,因为这是设备的出站连接。如果连接丢失,设备将重新连接到服务器并“检入”以查看它是否遗漏了任何内容。
*:如果设备只有可用的蜂窝连接,使得始终保持网络连接打开是不可行的,它可能依赖于通过蜂窝网络本身的通知,有点像SMS。但这完全是一个单独的事情。