我目前正在构建一个HTTP服务器来提供地理信息。
第一步是使用来自的地理信息填充此服务器 geonames.org
我想自动化这个过程,因为GeoNames文件会定期更改,所以我编写了一个函数,尝试并行下载所需的文件。
下载初始文本和ZIP文件可以正常工作,但下一步是解析下载的文件 countryInfo.txt ,提取所有ISO国家/地区代码,然后下载每个国家/地区代码对应的ZIP文件。
countryInfo.txt
当我将国家代码列表限制在十几个左右,或者按顺序执行下载时,我的代码工作正常。但是,当我尝试并行请求所有252个文件时,我会收到以下错误:“连接失败” httpc:request/4 .
httpc:request/4
编码可从[此Git repo]获得。( https://github.com/ChrisWhealy/Erlang/tree/master/geo_server )
这将是由于对geonames的请求限制而导致的错误。组织web服务器或我的代码中的某些内容?
谢谢
克里斯·W
产生数百个进程,每个进程连接到同一台服务器通常是一个非常糟糕的主意,甚至被认为是 attack . 很可能是一些防火墙规则开始生效,并开始拒绝更多连接。
尝试使用某种线程池(如 this )将所有请求排队,并并行执行大约10-20个请求。