我目前正在编写一个使用图形 API 集成 facebook 的桌面应用程序。我想实现实时更新(http://developers.facebook.com/docs/api/realtime/),但在文档中说您必须建立一个 http 服务器,facebook 将处理该服务器以发送更新到。我现在的问题是我的盒子位于只有一个 IP 地址的路由器后面(因此路由器使用 NAT)。facebook 是否仍然可以联系我的网络服务器向我发送更新?
4 回答
@kohlehydrat:每个网络服务器都需要有一个可以从互联网上“任何地方”访问的 IP 地址。由于您的网络服务器位于只有一个 IP 的 NAT 后面,我严重怀疑 Facebook 能否访问您的网络服务器。
但是,看看您是否可以配置 NAT,以便为您的应用程序保留一个专用端口。
例如:
10.122.48.222:4231
traffic to port 4231 is directed towards your application.
10.122.48.222 is outward facing NAT IP address.
我不确定我们是否可以做到这一点,但这是一个想法。
路由器应该捕获端口 80 请求(或您的网络服务器应该侦听的任何端口)并将其转发到您的内部计算机端口 80,最好采用一致的 NAT 样式。
基本上,如果双方都能找到对方,那么基于 IP 的通信和正确的路由就不应该成为问题。
你需要做所谓的“端口转发”。最初我遇到了类似的问题,然后我将我的 IP公开的端口从仅本地转发到公司。现在我的问题解决了。希望这可以帮助。
这个问题已经结束了,但是由于您还没有收到这个特定的答案(我相信大多数 facebook 开发人员为了在防火墙后面进行开发而这样做),所以我将在此处发布:
您可以将您的机器反向隧道到任何具有公开可用 ip 的机器。请参阅有关此主题的博客文章
在许多 facebook sdks 中,甚至包含此功能(例如,facebooker,一个 ruby gem 提供了在设置适当的设置后 rake facebooker:tunnel:start 的功能)