在 Twisted 中实现 Direct Connect 客户端的正确方法?

2023-11-29

我正在为 Direct Connect P2P 网络编写一个 Python 客户端。本质上,它的工作原理是连接到中央服务器,并响应正在搜索文件的其他用户。

有时,另一个客户会要求我们连接到他们,他们可能会开始从我们这里下载文件。这是与其他客户端的直接连接,不通过中央服务器。

处理与其他客户端的这些连接的最佳方法是什么?我目前正在使用一个 Twisted 反应器连接到服务器,但是是否最好拥有多个反应器,每个客户端一个,每个反应器在不同的线程中运行?或者有一个完全独立的 Python 脚本来执行与客户端的连接会更好吗?

如果还有其他我不知道的解决方案,我很想听听。我是 Twisted 编程新手,因此我愿意接受建议和其他资源。

Thanks!


在不了解协议的所有细节的情况下,我仍然建议使用单个反应器——反应器规模quite好(特别是高级的,例如PollReactor)这样您就可以避免与线程相关的开销(毕竟,这就是 Twisted 和其他异步系统通过避免此类开销来获得基本性能提升的方式)。实际上,Twisted 中的线程主要在您需要连接到某个库(该库的函数可能会阻塞您)时非常有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Twisted 中实现 Direct Connect 客户端的正确方法? 的相关文章

  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 字典和数组作为类变量与实例变量

    这是赚取积分的简单方法 请解释以下内容 class C a b 0 c def init self self x def d self k v self x k v self a k v self b v self c append v d
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default

随机推荐

  • 如何通过 bash 中的变量传递带空格的命令行参数[重复]

    这个问题在这里已经有答案了 我想要实现的是从文件中读取命令行参数并使用它们调用命令 所以本质上我需要通过 bash 变量传递参数 问题是有些参数中有空格 我怎样才能做到这一点 不工作的代码 来说明问题 file txt 内容 引号只是为了显
  • 使用互操作在 Word 2010 中按样式查找段落

    有人可以给我指出正确的方向 或者告诉我如何使用 c net 中的单词互操作按样式名称查找段落 尝试这样的循环 using WN Microsoft Office Interop Word WN Application WordApp Wor
  • ui 选择 angularjs 设置输入值的最大长度(ui 选择匹配)

    我想要一个额外的属性 就像从 ui select match 传递的 Placeholder 一样 我想设置选择输入的最大长度 我可以通过 select min js 添加属性 maxlength 设置它 但我认为对 lib 进行更改 文件
  • 更新电子邮件验证状态而不重新加载页面

    在我的网络应用程序中注册后 我将用户重定向到一个页面 告诉他验证他的电子邮件 一旦他这样做了 我想自动检测验证状态的变化 然后更改页面 沿着这些思路 auth user subscribe user gt if user user emai
  • WsFederation 身份验证登录循环

    我在使用时遇到登录循环问题WsFederation Authentication在我的 MVC Web 应用程序中 我使用 Visual Studio 创建 Web 应用程序的脚手架并设置WsFederation in the Startu
  • 查找所有子元素的最大值并在 XSLT 中获取其父元素

    使用下面的 XML 我需要找出哪个人在每个站点工作的时间更长 例如 在下面的 XML 中 人员 1 在站点 1 工作了 8 小时 但人员 2 仅工作了 6 小时 因此 结果应包含转换后的 XML 中的人员 1 和站点 1 如果时间相等 则选
  • 签出旧提交并将其设为新提交[重复]

    这个问题在这里已经有答案了 在 Git 上 假设我搞乱了我的提交 并且我想将版本 3 之前的提交作为新版本 如果我做git checkout xxxx 它创建了一个新分支 似乎我只能合并它 我可以将其设为新的 主版本 吗 I want A
  • jQuery 手风琴 - 当打开另一个手风琴窗格时如何折叠其他打开的手风琴窗格

    我有一个手风琴 我希望具有以下功能 当用户单击链接展开时 其他展开的链接 如果有 将折叠 我知道这个功能是内置在手风琴插件中的 但我试图避免添加另一个库 jQuery UI 编辑 这是我现在拥有的代码 这里位于 jsFiddle 上 htt
  • Objective-C 运行时函数的线程安全保证?

    Objective C 运行时函数的线程安全有哪些保证 有吗 我说的是在runtime h中声明的函数 例如class lookupMethod objc setAssociatedObject 其中很多都是线程安全的 调配等等 但也有一些
  • 如何将SqlAlchemy结果序列化为JSON?

    Django 有一些很好的自动序列化功能 可以将 ORM 模型从 DB 返回为 JSON 格式 如何将SQLAlchemy查询结果序列化为JSON格式 I tried jsonpickle encode但它对查询对象本身进行编码 我试过js
  • Angular 2:从父组件获取RouteParams

    如何从父组件获取 RouteParams App ts Component RouteConfig path component HomeComponent as Home path username component ParentCom
  • 在“for”循环中绘制几张不同大小的图片

    我是 knitr 和 markdown 的新手 这是我问的第一个问题 也许这个问题有一个我找不到的简单答案 我有一个 for 循环 它创建了 3 个 ggplots 根据数据输入 循环运行 300 到 400 次 我想将这3张图片的大小定义
  • 对许多实体使用一类 Voter

    这是函数支持类课堂上的选民 http symfony com doc 2 5 cookbook security voters data permission html public function supportsClass class
  • 按日期平均 Pandas 数据框

    我有以下数据框的日期列表 debt date 2017 11 17 16 00 00 77 2017 11 17 17 00 00 73 2017 11 17 18 00 00 74 2017 11 17 19 00 00 73 2017
  • Rails .where() 查询不起作用

    非常感谢你的帮助 我有一个locations and ads桌子 地点has many ads我对位置模型执行以下查询 locations Location joins ads where location params require l
  • 如何替换mootools 1.3中的bindwithevent

    我想知道如何替换Mootools 1 3中的bindWithEvent函数 文档中的示例非常基本 Element addEvent click function e myFunction bind bind e 但是 如果我需要将参数传递给
  • 为什么在 scala 中使用 return 是一个坏习惯

    我正在通过 coursera 上的函数式编程课程学习 scala 我注意到自动样式检查器告诉我使用 return 是一个坏习惯 这是为什么 对我来说 使用 return 似乎会使代码更具可读性 因为任何其他程序员都可以立即看到它以及函数返回
  • setNote 最后修改值

    function onEdit e Set a comment on the edited cell to indicate when it was changed var range e range range setNote Last
  • 当 Base64Encoded 图像嵌入到包含 html 的丰富电子邮件中时,图像尺寸会减小

    我正在编写代码来生成富文本 html 作为邮件内容作为 eml 文件 我已关注以下链接 https jsfiddle net seadotcom yd1n8Lfh 复制此问题的 JsFiddler 是 https jsfiddle net
  • 在 Twisted 中实现 Direct Connect 客户端的正确方法?

    我正在为 Direct Connect P2P 网络编写一个 Python 客户端 本质上 它的工作原理是连接到中央服务器 并响应正在搜索文件的其他用户 有时 另一个客户会要求我们连接到他们 他们可能会开始从我们这里下载文件 这是与其他客户