1.91测试版

感谢建议

启动时全部读入内存,是为了在列表里全部显示出来时有平滑的滚动效果。否则得分页显示,每翻一页硬盘狂转一阵。

这样手动添加的操作是可以进行测试。但同一客户端同时多IP发起连接,有实际的应用吗?

是的,udp传输没有连接的概念,只有一个个独立的数据包,靠应用程序自行拼装起来

感谢反馈,是类似于qbittorrent的搜索引擎插件列表吗?

这个统计数字只是 他人共享 + RSS种子 + DHT种子 + Tracker种子 四个列表里下载的元数据数量总和。

有的,最简单的场景就是家庭多拨,利用爱快路由器实现从运营商获取多个公网ip地址进行宽带叠加,相比这个你听过吧,能拨上几个,宽带就能叠加翻几倍网速
并且爱快能HTTP流量均衡负载,由于tracker非常多,每次发起一个新HTTP请求时候,路由器都会负载到不同的IP线路上,此时tracker会收到的是多个全部的公网ip。

针对服务器多个ip场景,应该通过api获取Windows网卡扩展ip,然后提交到DHT网络中,此时下载方通过DHT寻找到ip,就不需要手动去添加用户ip了,这个过程就是自动化
最典型的服务器场景,阿里云购买宽带是多个ip叠加的,例如一个IP=200Mbps,想要1000Mbps,就要购买五个阿里云IP,每个为200Mbps
并且服务器多个IP有利于建立上多个TCP通道,可以加快两端的传输速度
例如服务器有两个固定IP的例子

所以做个高级选项,允许多个ip连接 就能连上了,现在就是只能连上一个ip

网友分享的900w他人共享种子数据库,全部读入ram要2小时,占内存2.8g,建议还是分页显示
QQ截图20220709221312

2.8G,,确实有点离谱

一直不太明白这个是不是bug?为啥要显示取消拦截的选项,是这个人被拦截了吗?并没有被ban啊

测试了一下:
1、针对路由器多IP的情况,对主机是透明的。主机上对于同一个IP:port目的地址发起的连接,无法保证是经由不同源地址发出去的,所以也无法主动利用路由器的多IP。
2、针对主机多IP的情况,发起的连接是默认是由路由表选取合适的网卡作为源IP。针对同一目标地址,要想用指定某一个源IP发起一条连接,可以用高级选项network.preferred_network_adapter_ipv4。要想指定不同源IP发起多条连接,彗星代码还得做不少修改。
3、目前彗星代码里,只会对同一源IP且相同peer_id的客户端才会限制为1条连接,所以你说的“现在就是只能连上一个ip”情况,应该是因为发起方对目标方建立的多条连接没有走不同的源IP地址,而不是被目标方拒绝连接了。

是指撤销上面的三个“手动拦截”操作

进入ban列表后,取消拦截用的

下载torrent文件失败:[torrent download] Soap Failed (PROTOCOL_ERROR - Unexpected Disconnect)

任务列表下载磁力这个能不能改善下,多加几次重试,例如dead[10]:10次才触发,目前是用户列表所有用户connecting无法建立连接就直接跳 Unexpected Disconnect 错误,这种情况如果自身有公网ip,对方没有,,就没办法等待对方发起远程请求连接到自身的公网ip。

或者直接建议推荐废弃掉这个Unexpected Disconnect功能,单独使用超时的高级选项 torrent_share.metadata_dl_timeout 来控制就可以了

torrent_share.metadata_dl_timeout 效果如下
下载torrent文件失败:[torrent download] Soap Failed (CONNECT_FAILED - connection timeout)

控制磁力有一个就够了吧,,,没必要同时用connection timeout和Unexpected Disconnect两者

1.92测试版已发布

是BT任务下载元数据,还是种子列表下载元数据?torrent_share.metadata_dl_timeout应该是只对后者有效。如果显示Unexpected Disconnect后任务立即停止,是不是没开DHT?

是BT任务下载元数据,,connection timeout那可能是torrent_share.metadata_dl_timeout有BUG导致对BT任务列表也同时去生效了,Unexpected Disconnect测试时候没有开DHT

那测试时是从tracker获取peers,再连接peer下载元数据对吧?

对的,单独从tracker获取的,不是手动添加用户ip
会同时生效Unexpected Disconnect和connection timeout两者

测试了一下,目前元数据下载出错的几种情况如下:

1.种子列表下载元数据

a. 单个连接连接后意外断开:PROTOCOL_ERROR - Unexpected Disconnect
b. 单个连接超时:CONNECT_FAILED - connection timeout
c. 开启DHT时没有从任何来源获取到元数据,直到 torrent_share.metadata_dl_timeout 超时错误:Failed to download torrent: connection timeout
d. 关闭DHT但磁链里有tracker时没有从任何来源获取到元数据,torrent_share.metadata_dl_timeout设置未生效,会提前停止元数据下载。

2.BT任务下载元数据

a. 单个连接连接后意外断开:PROTOCOL_ERROR - Unexpected Disconnect
b. 单个连接超时:CONNECT_FAILED - connection timeout
c. 开启DHT时没有从任何来源获取到元数据,任务不会主动停止。
d. 关闭DHT但磁链里有tracker时没有从任何来源获取到元数据,任务会主动停止。

下一版准备完善无DHT但有tracker的判断,修正1-d和2-d情况的处理。种子列表始终由 torrent_share.metadata_dl_timeout 控制超时,BT任务则保持一直运行。

好的,没看明白,下个版本是可以废弃掉Unexpected Disconnect吗?不然还是会被1a和2a触发,还是说1d和2d时候可以跳过这个触发状态

简单地说,下个版本1a, 2a不会再导致停止下载了

才看到回帖消息。。。

对,,,就是这个彗星的限制东西拦截了
因为下载方只有一个ip,或者是一个相同的客户端ID,所以发起连接到做种的时候,做种方检测到是相同的源ip,或者客户端ID相同导致做种方触发拦截
做种方才是多个ip的情况,然后做种方把下载方拦截导致连不上做种方的多个ip地址
这回你应该理解是说的什么东西了,,,要的就是去掉这个限制的一个选项
最好做种方可以把本地所有IP通过DHT广播出去,以便下载方通过DHT检索到做种IP(这也可以做成一个选项 bittorrent.dht_send_double_localip

这个不用管,像你说的是透明的,但是比特彗星会拦截导致连不上。

这个也不用管,因为只有一个网卡,不是多个网卡来分配多个ip,系统默认选中主ip发起就行,需要的是获取网卡的本地IP,并且通过DHT广播出去,DHT应该能附带ip地址吧?不像tracker那样是获取和服务器的连接握手ip

以上考虑均为做种方多IP的情况

如果我想得没错的话,DHT可以附带ip地址的话
下载方其实也可以获得受益,其他人可以通过DHT获取到下载方的多个ip

以上前提条件建立在,,,把IP地址广播进DHT时候不是什么握手IP,只需要dht的udp数据包里附带ip地址能识别上就行

要想让做种方充分利用多IP,最直接的方式是每个IP单独模拟一个做种的seed,这样不用修改任何协议,兼容性最好,麻烦是需要重构部分代码。

确实,你说的这样,甚至还能更好的兼容到其他客户端。算是最好的方案,但是开发起来会很复杂繁琐。