用Python编写的P2P应用程序

10

我正在尝试在我的项目中实现P2P,但由于对P2P的误解而遇到了问题。

这是我的实现方法:

  1. 客户端打开程序,并向服务器发送连接请求,服务器将客户端添加到等待列表中。

  2. 当有两个以上的人连接到服务器时,服务器会向他们发送应该连接的地址,并从列表中删除他们。

如何在一个文件中创建一个服务器和客户端?我应该创建两个线程-一个用于客户端,一个用于服务器吗?

如果有更好的方法,请告诉我。


客户端-服务器听起来与点对点相矛盾。无论如何,你需要一个可以广播节点位置的“某物”。我建议为此创建一个程序,最可能是发布-订阅模式,使用发现主题。然后再创建另一个程序用于实际的p2p过程。p2p很可能需要线程或并发库,例如gevent、twisted、tornado等。让p2p实例订阅发现主题,并找到其他节点。从那里,两个节点进行握手,建立连接,做业务。 - Kenji Noguchi
目前,似乎只有少数项目提供Python中的P2P库:停滞不前:https://github.com/p2p-today/p2p-project停滞不前:https://github.com/ethereum/pydevp2p 停滞不前:https://github.com/StorjOld/pyp2p 不完整且正在进行中:https://github.com/libp2p/py-libp2p因此,我们可以看到并没有太多的选择。 - Phil L.
1个回答

11

我不确定项目要求是否需要P2P系统,但是...

P2P系统没有单独的客户端和服务器应用程序,而是有一个单一的应用程序同时充当客户端和服务器。从某种意义上说,该应用程序作为客户端,因为它连接到服务器,同时作为服务器,因为它接受来自客户端的查询/命令。

http://cs.berry.edu/~nhamid/p2p/framework-python.html展示了如何在Python中构建简单的P2P系统。此示例创建一个循环以接受传入的连接(其他对等点),并生成一个线程来处理传入的连接。它还具有向已登录对等方发送消息的结构。

一个大问题是对等方如何定位其他对等方,这通常通过第三方来处理,例如专用的“协调”/“引导”服务器,可以将对等方指向至少另一个对等方(从那里可以请求更多对等方)。考虑到您已经知道对等方将用于连接到另一个对等方的地址,您的项目可能不需要这个。

参考上述网站,您可以编写一个处理程序函数并将其放置在self.handlers中。由于该函数将传递传入对等方的信息,因此您可以使应用程序发送回所需的数据(要连接的地址)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接