간단한 링크 검사기를 작성하고 실행하는 것은 쉽습니다. 이중화없이 1000s의 링크를 신속하게 처리하고 전체 시스템을 허비시키지 않으면 서 죽거나 응답이 느린 링크를 처리하는 것이 더 어려워집니다.
- 는 데이터베이스에서 읽는 디스패처 스레드 :
나는 세 개의 스레드, 플러스 두 개의 큐를 사용하십시오. "확인할 것"대기열에 체크인 할 URL을 찾고 대기열에 넣습니다.
- 첫 번째 큐에서 소비 한 결과를 "업데이트 된 URL 결과"큐에 넣는 작업자 스레드입니다.
- # 2의 스레드 결과를 가져 와서 데이터베이스를 업데이트하는 업데이터/소비자 스레드입니다.
루비 일부 내장 클래스가 도움이 : 내가보기 엔 중간 스레드에서 사용 Typhoeus and Hydra을 권하고 싶습니다
. 이 두 클래스에 대한 문서는 병렬로 실행되는 여러 스레드를 처리하는만큼 많은 작업을 처리합니다.
은 Rails 애플리케이션의 일부로이 코드를 작성하지 않습니다. Rails가 추가 한 가치는 없으며 필요하지도 않습니다. 기존의 database.yaml 설정과 모델에 액티브 레코드와 피기 백이 필요하거나 Rails' "runner"을 사용하여 코드를 레일스 코드의 보조 도구로 실행하십시오.
또는 Rails 서버가 느려지지 않도록 다른 서버에서 실행하기 위해 작은 응용 프로그램 별 코드를 작성합니다. MySQL이나 PostgreSQL 드라이버를 사용하면 Rails가 사용하는 것과 동일한 데이터베이스와 대화 할 수 있습니다. 이 경우 ORM으로 작동하려면 Sequel 보석을 사용 하겠지만 액티브 레코드보다 선호하기 때문입니다.
실패한 URL의 재 시도, 리디렉션 감지 및 소스 URL 업데이트를 포함하여 시간 낭비를 방지하고 호스트 서버의 성능을 저하시키지 않으므로이 코드를 작성할 때 고려해야 할 사항이 많이 있습니다. 금지.
나는 몇 년 동안이 목적을 위해 몇 가지 응용 프로그램을 작성했으며 올바른 작업을 수행하는 데 많은주의를 기울 였으므로 나중에 디자인을 생각해보십시오. 그렇지 않으면 나중에 주요 재 작성이 끝날 수 있습니다.
'GET'요청 대신 'HEAD'를 수행하여 확실히 저장할 수 있습니다. 아직 수행하지 않은 경우라면 가능합니다.예 :'Net :: HTTP.start ('example.com') {| http | http.head ('/')} .code' –
고마워요. 나는'Faraday.head()'를 사용하고 있습니다. –