¿Implementación del rastreador multiproceso de Java?
1. Requisitos
1. Capture periódicamente títulos, contenido, hora de publicación y fuentes de noticias fijas del sitio web.
2. El programa debe ser compatible con subprocesos distribuidos y múltiples.
2. Diseño
1. El sitio web está arreglado, pero se pueden agregar nuevos sitios web. En el futuro, el diseño del nodo de contenido de cada sitio web es diferente, por lo que debe admitir la configuración dinámica para agregar nuevos sitios web para facilitar la expansión futura, lo que requiere intervención de desarrollo en todo momento.
2. La estructura del nodo html del sitio web puede cambiar, por lo que también debe admitir nodos de extracción configurables.
3. ¿Cómo apoyar la distribución? La idea más simple en este momento es: implementar el programa en varias máquinas y crear una nueva o crear una tarea programada en uno de los programas de implementación e iniciar oportunamente qué sitio web debe rastrear cada máquina. Actualmente, no es posible admitirlo. El mismo sitio web al mismo tiempo será más problemático rastrear varias máquinas al mismo tiempo, por lo que se debe utilizar una cola distribuida. Por lo tanto, por el momento, un sitio web sólo será rastreado por una única máquina al mismo tiempo.
4. Multihilo, ¿cómo multihilo? Tengo dos implementaciones de rastreo de subprocesos múltiples:
(1) Un subproceso rastrea un sitio web, mantiene su propia cola de URL para un rastreo amplio y rastrea varios sitios web al mismo tiempo. Como se muestra en la figura:
(2) Varios hilos rastrean diferentes sitios web al mismo tiempo. Como se muestra en la imagen:
Los dos métodos anteriores en realidad tienen sus propias ventajas y desventajas, depende de cómo elijamos.
Método 1: cada hilo crea su propia cola. La cola en la imagen no necesita concurrentQueue. Ventajas: no implica controlar la concurrencia. Cada sitio web tiene un hilo para rastrear un sitio web y lo hará automáticamente. rastrear después de que se complete el rastreo Reciclar y destruir subprocesos. Fácil de controlar. Desventajas: la cantidad de subprocesos no se puede ampliar. Por ejemplo, cuando solo hay 3 sitios web, solo puede abrir hasta 3 subprocesos para rastrear y no puede abrir más, lo que tiene ciertas limitaciones.
Método 2: N subprocesos rastrean N sitios web al mismo tiempo. La cantidad de subprocesos no está vinculada a la cantidad de sitios web. Ventajas: la cantidad de subprocesos se puede ajustar y no tiene nada que ver con la cantidad. de sitios web rastreados. Podemos abrir 3 sitios web, 4, 5 o 10. Esto se puede ajustar según sus recursos de hardware. Desventajas: es necesario controlar la concurrencia y cuándo destruir el subproceso (el subproceso1 está inactivo y la cola está vacía no significa que la tarea pueda finalizar, es posible que el resultado del subproceso2 aún no se haya devuelto). El sitio web rastreado es lento, ralentizará todo el proceso del rastreador.
3. Implementación
¡El método de rastreo finalmente eligió el método dos porque el número de subprocesos es configurable! Tecnología utilizada: después de usar jfinal, descubrí que no era adecuado, pero debido a problemas de progreso del proyecto, seguí usándolo. Las dificultades en las que debe centrarse el proyecto de desarrollo maven de gestión de proyectos jettyserver mysql eclipse son: (1) Controlar razonablemente N subprocesos para rastrear el sitio web normalmente, y cuando se complete todo el trabajo de subprocesos y la cola que debe rastrearse esté vacía, N subprocesos Sal y destruye al mismo tiempo. (2) Los nodos de diseño de diferentes sitios web son diferentes. Es necesario configurar la URL que cada sitio web necesita rastrear y la ubicación del contenido del nodo rastreado en el nodo html. (3) Procesamiento de contenido personalizado Debido a problemas de diseño de la estructura HTML, Beida Jade Bird cree que el contenido capturado puede tener etiquetas HTML redundantes o cómo manejar el contenido redundante.