nuget 自建server 加速

PS:20161216 更新,支持 .net core 包还原。为了加速,对 FindPackagesById 做了本地缓存处理,时间是12小时。因此,程序包在第一次的加载的时候,会慢点。 同样的,下载过的包,会被存在到azure 中,可以加快下载包的速度。搜索,只能搜 已经下载过的包(database 中,下载的不同版本越多,就能搜越多)。 综合,只要被查询和下载过的包,对任何人第二次访问,都有加速效果(都在国内,减少了原本网络等待时间。如果还是很慢,那就是我的程序和服务器的问题了。)。有什么问题,可以在下方留言~~~

 

PS: 目前不支持 .net core 包还原。(待解决:20161214)

 

先上地址:  http://nuget.wuliping.cn/api/v2/   

nuget 越来越难连。特别是我的渣网。每次都要开挂,嫌麻烦。

据说 v3 正在解决难连问题,不过在 china ,没什么期待!

于是想想能不能自己解决下。 目前手上有一个小小的VPS, azure 的剩余金额没怎么用。

那么就自制个“镜像”吧。好吧,其实也算不上是镜像。

工作原理

先说说 nuget 的 server 端, server 端 有 3 个公开的URL端口,Search,FindPackagesById,GetUpdates 。 Search 用于在 client 上 搜索, FindPackagesById 用于查找指定ID的包版本信息,GetUpdates 略过。

当 在 VS 上右键 打开 程序包管理 时,会 遍历所安装的程序包,然后 调用 FindPackagesById 获取包信息和版本信息。所以,project 的包越多,

每个 FindPackagesById 等待的时间越久,就越慢。

当点击安装某个包,或者 使用命令行 install-package 和 update-package 时,会 调用 FindPackagesById 去查询包的信息,如果有依赖包,同样 会查询 依赖包的 信息。 

我们最常用的应该是 安装包和升级包了,至于 搜索包,我一般 是 在 gallery 上 直接搜索。 FindPackagesById 应该 算是使用频率最高的一个端口了。

参考 nuget gallery 的源代码(不是最新的),使用 dataservice 建立一个v2  的 API 端点。只要包含 Search,FindPackagesById,GetUpdates  就能 算是一个 nuget server host 了。 如果 client 使用 FindPackagesById 无法找到包的信息,client 会认为 此源 没有这个包,会使用其他的源,如果有的话。 所以, 我把 FindPackagesById 请求 转向 了nuget gallery ,这样就能找到 gallery 上的包,同时 修改了包的 下载地址,指向 了 自己的 API 下载地址。

包下载

为了达到下载加速,我把包存到了 azure 上。在下载的时候,会先判断 在 DB 上 是否包含包的信息,有的话,直接从 azure 下载。没有,则 从 gallery 上下载,并记录在DB 和 上传到 azure  上,方便下次下载。

好吧,说了这么多,也没描述清楚 。。。  直接说 API 地址吧。     

API:  http://nuget.wuliping.cn/api/v2/ 

添加到VS上方法是,工具--> nuget 包管理器 --> 程序包管理器设置 --> 程序包源 ,点击右上方 的 加号 ,填入 API 地址,再点更新。 

记录信息到 DB,是为了能 搜索 。 不过,在 vs2015.3 上浏览��时无法翻页(估计是因为使用wcf 版,官方目前使用的是 odata 版)。

 

由于技术有限,语言水平有限,先说这么多。

 

添加评论

Loading