代码之家  ›  专栏  ›  技术社区  ›  Rosstified

如何让服务器通知防火墙后面的客户机

  •  0
  • Rosstified  · 技术社区  · 15 年前

    我有这样一个例子,我有一个面向公众的服务,在互联网上,我希望服务器能够联系具体设计的嵌入式设备,在需要时,在正常的家庭网络。

    我知道设备可以轮询服务器以获取更新等,但是1)在服务器执行某些操作和设备轮询以获取更新之间会有一个延迟;2)会产生大量无用的流量(随着时间的推移)。

    有人对怎么做有什么建议吗?不过,我最初的做法是让嵌入式设备使用UPNP尝试在家庭路由器中生成端口转发规则,然后将该端口注册到服务器。然后,服务器可以生成一个到该地址的HTTP请求(HTTP,这样它就可以在不被防火墙等阻塞的情况下被路由等)。如果设备无法创建转发规则,那么它将重新返回到轮询方法。

    这听起来是对的吗?有没有人能和他们分享这种经历?(客户端将是嵌入式Linux,Server .NET上的C++)。

    1 回复  |  直到 15 年前
        1
  •  0
  •   symcbean    15 年前

    很大程度上取决于您认为将与多少设备/网络一起使用,以及您对它们的软件/配置有什么控制。

    因为你在谈论UPNP,这意味着会有很多客户机网络-除非你能控制路由器配置/硬件,否则你会遇到很多问题,让UPNP解决方案可靠工作。

    此外,您还提到了端口转发,这意味着嵌入式设备将没有真正的IP地址。

    您说您希望使用HTTP来避免它被阻塞,但是大多数防火墙/路由器等并不是智能阻塞完全是在端口号上完成的。如果在一个NAT路由器后面有多个设备,那么除非实现一个控制器来根据HTTP内容中继请求,否则必须使用非标准端口来寻址这些设备。

    唯一可行的解决方案是让嵌入式设备连接到服务器并等待事件发生。

    C.