TCP Holepunch 实现

Posted

技术标签:

【中文标题】TCP Holepunch 实现【英文标题】:TCP Holepunch implementation 【发布时间】:2013-05-06 18:26:56 【问题描述】:

我正在研究一个类似于家庭自动化系统的想法。 网络设备的布局是这样的:

我想要的是我的手机应用程序能够随时与家庭服务器通信,而且服务器也能够访问我的手机(推送通知)。 为此,我认为使用数据中心中的服务器作为流量中心来实现 TCP-Holepunching 是一个好主意。

但问题是,由于我的 Java 技能还不够好,我不得不用 php 脚本语言编写服务器,但 PHP 无法保持套接字处于活动状态。

是否有可用的 TCP 打孔服务器软件(在 Debian 中可执行)能够保持套接字活动并将任何命令从我的服务器推送到正确的目的地(即:电话),反之亦然?

【问题讨论】:

关于你的赏金:用这么少的信息提供一个可行的解决方案是不可能的。有很多变量,例如“防火墙”是什么意思? NAT?仅限 HTTP?您打算使用哪些类型的手机?看看 XMPP 协议,对于手机来说可能还有 BOSH。不过,再具体不过了。 基本上,只要设备能够与数据中心中的服务器建立连接,我应该能够从任何地方建立连接,该连接必须保持活动状态能够沟通 我可能错误地指定了“工作答案”,我的意思是某种可以使用的代码示例,而不是仅仅告诉我你是否使用代码 A 和库 B 你应该能够创建产品C 你用的是什么手机?大多数现代手机已经有推送通知...... android 4.2,它们支持推送通知,但在某些情况下我的服务器将无法访问它(例如在 NAT 或防火墙后面) 【参考方案1】:

有一些方法可以让套接字在 PHP 中工作。可以在此处找到一个执行此操作的库: http://socketo.me/

还可以使用NodeJS 轻松设置这样的服务器。您使用 javascript 编写服务器代码(在 Google Chrome 的 V8 引擎上运行),然后您可以根据事件处理持久连接。

只需几行代码就可以(使用 NodeJS)编写一个中继服务器(从您的手机中继到您的家用 PC,反之亦然)。

【讨论】:

我已经完成了The Node Beginner Book 的一半,这种用例似乎就是它的用途。我要成为粉丝了。 这不是打孔,这只是一个代理/中继。打孔的重点是实际数据直接在防火墙设备之间传输。

以上是关于TCP Holepunch 实现的主要内容,如果未能解决你的问题,请参考以下文章

TCP通信的客户端代码实现,TCP通信的服务端代码实现

TCP是如何实现可靠传输的?

Java:实现Nio方式实现tcp通信

如何实现TCP和UDP传输

Linux-TCP编程流程-Socket编程-单线程实现TCP客户端和服务端交互-多进程实现TCP客户端和服务端交互

《TCP-IP详解卷2:实现》PDF下载