0

是否可以仅使用 PHP 实现 p2p?没有 Flash 或 Java,显然没有在个人计算机上安装某种代理/客户端。

所以即使它可能不是“真正的”p2p,但它会使用服务器建立某种连接,但其余的通信必须使用 p2p 完成

我为小小的误解道歉,“php”我的意思不是一个 php 二进制文件,而是一个托管在两个对等点远程的 Web 服务器上的 php 脚本,所以每个对等点只有一个浏览器。

4

9 回答 9

2

无需在自己的计算机上安装某种代理/客户端

每台计算机都必须安装 PHP 二进制文件。

编辑

我在您提到的基于浏览器的另一篇文章中看到。javascript 中的安全限制将禁止这种类型的交互

于 2009-07-14T15:40:45.190 回答
1

不。

你可以用 PHP 编写一个 P2P 客户端/服务器——但它必须安装在参与的计算机上。

您不能在网络服务器上运行 PHP,导致其他两台计算机在没有安装 P2P 软件的情况下相互通信。

你甚至不能使用 JavaScript 来提供帮助——同源策略会阻止它。

运行浏览器的 JavaScript 可以使用基于 PHP 的服务器作为中间人,以便两个客户端可以通信——但您不会实现 P2P。


自 2009 年(最初编写此答案时)以来,编写了 WebRTC 协议并在浏览器中获得了广泛的支持。

这允许您在 Web 浏览器之间执行点对点,但您需要用 JavaScript 编写代码(WebAssembly 也可能是一种选择,它可以让您编写 PHP。)

您还需要一堆非对等服务器代码来支持您可以用 PHP 编写的 WebRTC(例如,允许对等发现和防火墙周围的代理数据)。

于 2009-07-14T15:39:19.590 回答
1

这是非理论性的,因为服务器端应用程序 (PHP) 没有对等方的系统访问权限,这需要定义端口、IP 地址等以建立套接字连接。

添加:

但是,如果您要在每个对等点的 Web 服务器中使用 PHP,那可能会满足您的需求。

于 2013-08-27T20:52:14.707 回答
-1

点对点通信是否意味着通信直接从一个客户端到另一个客户端,中间没有任何服务器?由于 PHP 是基于服务器的软件,我认为您在其上编写的任何程序都不能被视为真正的 p2p。

但是,如果您想启用客户端到客户端的通信,并将 php 服务器作为中间人,那绝对是可能的。

于 2009-07-14T15:37:37.893 回答
-1

取决于您是否希望浏览器向此 PHP 应用程序发送数据。

不过,我已经完全用 PHP 制作了 IRC 机器人,它在我的 Web 浏览器中以类似于 mIRC 的方式显示它们的状态和输出。我只是将超时限制设置为无限并使用套接字连接到 IRC 服务器。你可以连接到任何东西。你甚至可以让它监听传入的连接并处理它们。

你不能做的是让浏览器在不中断请求的情况下保持双向连接(反正还没有......)

于 2009-07-14T15:42:26.153 回答
-1

不,不是。PHP 脚本只能运行很短的时间。通常默认的最大运行时间是两分钟,这对于 p2p 通信通常是不够的。在此之后脚本将被取消,尽管服务器管理员可以停用它。但即便如此,在整个下载过程中,服务器和客户端之间的 http 连接也必须保持。此时客户端的浏览器将显示其页面加载指示器。如果连接中断,大多数 Web 服务器将终止 php 脚本,从而取消 p2p 下载。

所以可能实现 p2p 协议,但是在客户端/服务器场景中,您会遇到 php 脚本的执行模型的问题。

于 2009-07-14T15:46:50.183 回答
-1

是的,但它不是通常所说的 p2p,因为两者之间有一个服务器。我有一种感觉,尽管您想要做的是让您的对等方相互通信,而不是在没有“中间人”服务器的情况下在它们之间建立直接连接(这通常是 p2p 的意思)

根据可扩展性要求,实现这种通信可能很简单(客户端上的简单轮询脚本),也可能要求很高(异步彗星服务器)。

于 2011-06-10T00:16:59.487 回答
-1

如果有人来这里看你是否可以用 PHP 编写 P2P 软件,答案是肯定的,在这种情况下,Quentin 对原始问题的回答是正确的,必须在计算机上安装 PHP。

你可以用 PHP 做任何你想做的事,包括编写真正的 p2p 软件。要在 PHP 中创建真正的 P2P 程序,您将使用 PHP 作为解释语言而无需 Web 服务器,并且您将使用套接字——就像在 c/c++ 中一样。最初接受的答案是对与错,除非原始发帖人询问在网络服务器上运行的 PHP 是否可以是 p2p 客户端——当然不是。

基本上要做到这一点,你基本上会编写一个 php 脚本:

  1. 打开服务器套接字连接 (stream_socket_server/socket_create)
  2. 查找对等 IP 的列表
  3. 打开与每个对等方的客户端连接
  4. ...
  5. 证明每个人都错了。
于 2022-02-12T15:52:45.027 回答
-2

双方都需要运行诸如 apache 之类的服务器,尽管出于演示目的,您只需使用内置的 php 测试服务器即可。接下来,您将不得不研究 php 中的防火墙打孔。我在 github 上看到了一个我认为是很久以前的脚本。是的,可以做到,如果您的客户不是精明的程序员类型,您可能需要确保他们已安装并运行 php。除非您将路径变量添加到 Windows 中的系统注册表中,否则路径变量可能不起作用,因此请确保您提供一个 bat 文件,以确保路径位于系统注册表中,以便 Windows 可以找到它。对不起,我不是 linux 用户。接下来,您必须开发代码。有关于打孔如何工作的说明,它确实需要公共域上的服务器,这需要允许 2 台计算机找到彼此的 IP 地址。也许您可以在免费网站上安装一些东西,例如www.000.webhost.com或者,您可以使用某种内置机制,例如使用个人电子邮件地址。报告当前ip。

最大的问题是路由器和防火墙,但是即使数据包被定向到公共 IP,仍然需要知道局域网上的目的地,因此有关如何编写数据包的信息应该是直截了当的。运气好的话,您可能会找到一个为您完成大部分工作的脚本。

于 2021-07-13T21:40:04.893 回答