有一个概念,也许是一个黑客,我一直在困扰自己很长一段时间。我认为基本上, TCP连接套接字是一个变量。它包含有关目标的一些信息,它由程序内存中的某些特定字节表示。 字节可以通过互联网发送到其他计算机。
该概念应该允许公共服务器在两个私有(防火墙或后面的路由器)计算机之间建立直接连接。谷歌搜索了一段时间后,我发现这个概念确实存在并被称为Hole punching。
这与代理完全不同。看看 - 这是典型的代理/中继连接:
数据流经公共服务器。绿色圆圈表示设备之间的套接字连接,蓝色线条表示数据流。
现在服务器将套接字A发送到设备B,反之亦然?
突然间,两台设备都互相拥有“地址”,可以互相发送任何信息:
我的问题是:PHP脚本是否允许获取共享该套接字信息所需的信息?如何防止套接字在PHP时间限制30秒后被终止?
答案 0 :(得分:0)
这个问题对我来说有点混乱。您忽略了有关该计划中客户的任何细节,以及在它们之间建立联系的目的。如果您在尝试在两个HTTP客户端之间建立直接连接方面考虑这一点,那么您提出的建议是不可能的,因为客户端软件必须经过精心设计才能实现此目的。此外,HTTP客户端不能充当服务器。
我不同意将网络连接视为变量甚至是状态结构是有用的。虽然它在某种程度上是正确的,但网络连接的完整状态通常存在于许多不同的地方:
打孔主要是为了欺骗NAT路由器在其状态表中设置正确的条目。这样做的确切方法取决于使用的第4层协议。您问题中的原理图显示了UDP打孔的典型流程,这需要一个可公开访问的服务器。在TCP的情况下,可能是您真正感兴趣的,服务器不一定需要开始。