【问题标题】:How do Messaging Applications "Bypass" Firewalls?消息应用程序如何“绕过”防火墙?
【发布时间】:2017-08-08 02:04:59
【问题描述】:

那里。我目前正在制作一个 python 网络聊天程序。目前它只能在本地网络上工作,并且由于路由器的防火墙阻止了正在发送给他们的消息,因此无法向连接到网络外的客户端发送消息。

所以,我的问题是:消息传递应用程序如何“绕过”防火墙向客户端发送消息?他们是否使用诸如从服务器“获取”信息并将消息通过隧道传回给他们之类的东西?但是,如果它每秒都在获取,那么即使这样也会消耗大量的电池。每分钟都获取是不切实际的。我在想他们使用更多的“推送”协议,就像我的 IMAP 服务器将我的电子邮件“推送”到我的手机一样。但是这些连接是如何通过防火墙的呢?

【问题讨论】:

  • 他们在没有正常阻塞的端口 443 上连接他们的套接字
  • 但是路由器如何知道将消息发送到哪个客户端?

标签: python messaging portforwarding instant-messaging tunneling


【解决方案1】:

我认为您正在寻找的是某种推送通知架构。我会向您指出这两个资源:

基本上,客户端设备与通知服务器建立全双工连接,并无限期地保持打开状态。应用服务器向通知服务器注册,当它们不通知客户端设备时,它们会将消息发送到通知服务器,通知服务器使用与客户端设备的开放连接来通知它们。出于效率原因,通常不同的应用程序使用相同的通知服务器。

回顾一下,客户端设备与通知服务器建立双工连接,应用服务器将客户端通知发送到通知服务器,通知服务器将通知发送到适当的客户端。

【讨论】:

  • 那么,我必须打开一个套接字并保持该套接字打开,直到用户关闭套接字?
  • 是的,您可以这样做,但我认为这不是唯一可能的方法。我建议你找到一个推送通知服务器的开源实现,并亲自看看他们是如何做到的。这将为您提供比 SO 中的简短答案更多的上下文。
  • 好的。非常感谢。
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 2016-02-23
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多